- 浏览: 84025 次
- 性别:
- 来自: 成都
最新评论
-
284772894:
好文章,谢谢
android硬件传感器 -
康妮西:
求这个View的解释望博主联系,我的联系方式:kangnixi ...
让scrollview在滚动的过程中自动定位页的边边 -
muyu114:
你这个是啥意思啊,有什么效果没有
让scrollview在滚动的过程中自动定位页的边边
一.通过xml文件实现
1.创建一个tab iew,所需的xml文件
</TabHost>
android:layout_marginTop="-5dp"
红色部分是为了让接下来加一排button的时候两个layout之间看上去没有黑边框。
2.创建一个tab iew,所需的activity代码
3.给某个tab 标签下面加一个排横着的button
<RadioGroup>----- <RadioGroup>
红色部分为加的button。
4.如何让tab标签切换的时候始终显示的是sub tab的home page
(当sub tab下有子页面跳转(多级跳转)的时候)
举例:tabhost中共有3个sub tab(A, B, C)
程序启动后点击 tab 标签 A 进入 A 界面
A中点击某个button的时候会changeContent 到 a1 界面,
如果这个时候点击tab 标签 B,就会跳转到 B 界面,
然后再点击 tab 标签 A的时候 显示的就不是 A 界面 而是 a1 界面,
因为 在标签间切换的时候 不会重新调activity的oncreate 而是 调的onresume,
如果 在A界面的时候changecontent,下一次回来,还会停留在上次的content界面上。
为了解决这个问题就需要重写 onresume 函数,然后重新设置一下UI,根据自己的具体需要重新设置content就是了
initUI();
红色部分initUI是自己写的函数哈。
5. 实现当某个sub tab 中有多级跳转(子页面跳转)的时候
按返回键有返回到上一级的效果而不是关闭程序
按返回键,程序关闭是activity的默认设置,为了解决这个文集需要从写onBackPressed() 函数。
为了表示层级关系我给每个page 指定了一个int变量。
然后给当前这个sub tab 添加 mSubPage int 变量
当changecontent的时候把当前page的int 的值置赋给这个mSubPage就是了
然后在onBackPressed函数中判断 mSubPage 的值 再决定跳转到他的上一级页面。
下面是部分代码
initView();是自定义的函数,会根据mSubPage 的值初始化不同的页面。
6. 避免tabHost中横竖屏切换的时候会自动重启activity,会自动调用onpase ondestory onstart onreume 等函数影响ui显示的逻辑的问题。
其实很简单,只需要在 mainifest.xml的tabhost的main activity标签中添加一个属性就可以了
android:configChanges="orientation|keyboardHidden这样就不会自动去重启了。
7.设置自定义的tab标签样式。。
自定义tab标签的layout
tab_wiget.xml
在代码中添加sub tab
tspec1.setIndicator(tabWidget1);指定自定义的layout
8.如何让tabhost在设备切换到横屏的时候改变tabhost 的layout,
比如让标签竖直排列在屏幕右边。
a.在res 下新建一个 layout-land文件夹
b.重写tabhost 的 xml 布局文件
注意把原来portrait中的relativeLayout 换成了LinearLayout
并且 加上了属性android:orientation="horizontal"
c.在建立tabhost 的主activity的oncreate函数中添加如下代码,修改tabwiget的排列为竖直的排列,这个只能在代码中修改,在xml中设置Orientation属性是不顶用的。
d.在layou-land的文件夹下,调整sub page的layout,注意文件名一定要跟layout中的文件名相同,这样在横置手机的时候才会自动调用layout-land下的布局。
9.如何控制某些sub page下可以横竖切换,有些sub page下不可以横竖切换。
可以根据不同的情况,在onResume() 跟 onPause() 函数中分别调用下面两行代码
//恢复横竖切换
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
//设置为竖屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//同理设置为横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
10.给tab 标签设置监听
举例:tabhost中共有3个sub tab(A, B, C)
程序启动后点击 tab 标签 A 进入 A 界面
A中点击某个button的时候会changeContent 到 a1 界面,
如果这个时候点击tab 标签 A,android默认的是不会发生变化的,仍然停留在a1界面
假如我们想点击tab 标签 A后让他回到上一级,就得给tab 标签设置监听
LocalActivityManager可以在ActivityGroup里面访问子Activity的View 并操作它去改变UI
1.创建一个tab iew,所需的xml文件
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:fadingEdge="none" android:layout_width="fill_parent" android:layout_height="fill_parent"> <RelativeLayout android:id="@+id/LinearLayout01" android:drawingCacheQuality="high" android:layout_height="fill_parent" android:layout_width="fill_parent"> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentTop="false" android:layout_below="@android:id/tabs" android:layout_marginTop="-5dp"> </FrameLayout> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:tabStripEnabled="false" /> </RelativeLayout>
</TabHost>
android:layout_marginTop="-5dp"
红色部分是为了让接下来加一排button的时候两个layout之间看上去没有黑边框。
2.创建一个tab iew,所需的activity代码
final TabHost tabs = (TabHost) this.findViewById(android.R.id.tabhost); final TabSpec tspec1 = tabs.newTabSpec("Journal [3]"); //设置tab的lable,跟icon tspec1.setIndicator("Journal [3]", getResources().getDrawable(R.drawable.navi_journal)); tspec1.setContent(new Intent(this, SubPageJournal.class)); tabs.addTab(tspec1); final TabSpec tspec2 = tabs.newTabSpec("Appointments"); tspec2.setIndicator("Appointments", getResources().getDrawable(R.drawable.navi_appointment)); tspec2.setContent(new Intent(this, SubPageAppointment.class)); tabs.addTab(tspec2); final TabSpec tspec3 = tabs.newTabSpec("My Lab"); tspec3.setIndicator("My Lab", getResources().getDrawable(R.drawable.navi_lab)); tspec3.setContent(new Intent(this, SubPageLab.class)); tabs.addTab(tspec3); final TabSpec tspec4 = tabs.newTabSpec("Medications"); tspec4.setIndicator("Medications", getResources().getDrawable(R.drawable.navi_medication)); tspec4.setContent(new Intent(this, SubPageMedications.class)); tabs.addTab(tspec4); //设置背景颜色 tabs.getTabWidget().getChildAt(0).setBackgroundColor(0xffDE2852); tabs.getTabWidget().getChildAt(1).setBackgroundColor(0xff007DC6); tabs.getTabWidget().getChildAt(2).setBackgroundColor(0xffFF9631); tabs.getTabWidget().getChildAt(3).setBackgroundColor(0xff94CB31); tabs.setBackgroundColor(0xffDE2852);
3.给某个tab 标签下面加一个排横着的button
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFFFF"> <RadioGroup android:id="@+id/RadioGroup01" android:background="#DE2852" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingTop="5dp"> <RadioButton android:text="My Care" android:id="@+id/myCare" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#ff000000" android:background="@drawable/buttonbackground" android:button="@drawable/no_image" android:layout_weight="1" android:gravity="center_horizontal" android:layout_marginLeft="5dp" android:layout_marginRight="5dp"></RadioButton> <RadioButton android:text="Vital" android:id="@+id/vital" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#ff000000" android:background="@drawable/buttonbackground" android:button="@drawable/no_image" android:layout_weight="1" android:gravity="center_horizontal" android:layout_marginLeft="5dp" android:layout_marginRight="5dp"></RadioButton> <RadioButton android:text="Givers" android:id="@+id/givers" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#ff000000" android:background="@drawable/buttonbackground" android:button="@drawable/no_image" android:layout_weight="1" android:gravity="center_horizontal" android:layout_marginLeft="5dp" android:layout_marginRight="5dp"></RadioButton> <RadioButton android:text="History" android:id="@+id/history" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#ff000000" android:background="@drawable/buttonbackground" android:button="@drawable/no_image" android:layout_weight="1" android:gravity="center_horizontal" android:layout_marginLeft="5dp" android:layout_marginRight="5dp"></RadioButton> </RadioGroup> <ListView android:id="@+id/content_list" android:layout_height="fill_parent" android:layout_width="fill_parent" android:cacheColorHint="#00000000" android:dividerHeight="0dp" android:divider="@null"> </ListView> </LinearLayout>
<RadioGroup>----- <RadioGroup>
红色部分为加的button。
4.如何让tab标签切换的时候始终显示的是sub tab的home page
(当sub tab下有子页面跳转(多级跳转)的时候)
举例:tabhost中共有3个sub tab(A, B, C)
程序启动后点击 tab 标签 A 进入 A 界面
A中点击某个button的时候会changeContent 到 a1 界面,
如果这个时候点击tab 标签 B,就会跳转到 B 界面,
然后再点击 tab 标签 A的时候 显示的就不是 A 界面 而是 a1 界面,
因为 在标签间切换的时候 不会重新调activity的oncreate 而是 调的onresume,
如果 在A界面的时候changecontent,下一次回来,还会停留在上次的content界面上。
为了解决这个问题就需要重写 onresume 函数,然后重新设置一下UI,根据自己的具体需要重新设置content就是了
@Override protected void onResume() { //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); initUI(); //System.out.println("SubpageAppointment.onResume"); super.onResume(); }
initUI();
红色部分initUI是自己写的函数哈。
5. 实现当某个sub tab 中有多级跳转(子页面跳转)的时候
按返回键有返回到上一级的效果而不是关闭程序
按返回键,程序关闭是activity的默认设置,为了解决这个文集需要从写onBackPressed() 函数。
为了表示层级关系我给每个page 指定了一个int变量。
然后给当前这个sub tab 添加 mSubPage int 变量
当changecontent的时候把当前page的int 的值置赋给这个mSubPage就是了
然后在onBackPressed函数中判断 mSubPage 的值 再决定跳转到他的上一级页面。
下面是部分代码
/** The PAG e_ chem. */ private final int PAGE_CHEM = 1; /** The PAG e_ ray. */ private final int PAGE_RAY = 2; /** The PAG e_ pathology. */ private final int PAGE_PATHOLOGY = 3; /** The PAG e_ mico. */ private final int PAGE_MICO = 4; /** The PAG e_ iagedetail. */ private final int PAGE_IAGEDETAIL = 5; private final int PAGE_CHEMEDTAIL = 6; private final int PAGE_PATHOLOGYDETAIL = 7; /** The m sub page. */ private int mSubPage; 。。。。。。 @Override public void onBackPressed() { if (mSubPage == PAGE_IAGEDETAIL) { mSubPage = PAGE_RAY; initView(); } else if (mSubPage == PAGE_CHEMEDTAIL) { mSubPage = PAGE_CHEM; initView(); } else if (mSubPage == PAGE_PATHOLOGYDETAIL) { mSubPage = PAGE_PATHOLOGY; initView(); } else { super.onBackPressed(); } }
initView();是自定义的函数,会根据mSubPage 的值初始化不同的页面。
6. 避免tabHost中横竖屏切换的时候会自动重启activity,会自动调用onpase ondestory onstart onreume 等函数影响ui显示的逻辑的问题。
其实很简单,只需要在 mainifest.xml的tabhost的main activity标签中添加一个属性就可以了
android:configChanges="orientation|keyboardHidden这样就不会自动去重启了。
7.设置自定义的tab标签样式。。
自定义tab标签的layout
tab_wiget.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/image_tab" android:layout_height="60dp" android:layout_width="60dp" android:background="@drawable/navi_home" android:layout_centerHorizontal="true"> </ImageView> <TextView android:id="@+id/title_tab" android:layout_width="fill_parent" android:textSize="12dp" android:text="ddffd" android:textColor="#ffFFFFFF" android:textStyle="bold" android:gravity="center_horizontal" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_below="@+id/image_tab" android:layout_marginTop="-10dp" /> </RelativeLayout>
在代码中添加sub tab
final TabHost tabs = (TabHost) this.findViewById(android.R.id.tabhost); final TabSpec tspec1 = tabs.newTabSpec("Journal [1]"); RelativeLayout tabWidget1 = (RelativeLayout) LayoutInflater.from(this) .inflate(R.layout.tab_widget, null); ImageView imageTab1 = (ImageView) tabWidget1 .findViewById(R.id.image_tab); TextView titleTab1 = (TextView) tabWidget1.findViewById(R.id.title_tab); imageTab1.setImageResource(R.drawable.redactivities); titleTab1.setText("Journal [1]"); tspec1.setIndicator(tabWidget1); tspec1.setContent(new Intent(this, SubPageJournal.class)); tabs.addTab(tspec1);
tspec1.setIndicator(tabWidget1);指定自定义的layout
8.如何让tabhost在设备切换到横屏的时候改变tabhost 的layout,
比如让标签竖直排列在屏幕右边。
a.在res 下新建一个 layout-land文件夹
b.重写tabhost 的 xml 布局文件
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <FrameLayout android:id="@android:id/tabcontent" android:layout_height="fill_parent" android:layout_width="fill_parent" android:background="#ffffffff" android:layout_weight="1"/> <TabWidget android:id="@android:id/tabs" android:tabStripEnabled="false" android:layout_height="fill_parent" android:layout_width="wrap_content" android:background="#ffDE2852" android:layout_weight="0"/> </LinearLayout> </TabHost>
注意把原来portrait中的relativeLayout 换成了LinearLayout
并且 加上了属性android:orientation="horizontal"
c.在建立tabhost 的主activity的oncreate函数中添加如下代码,修改tabwiget的排列为竖直的排列,这个只能在代码中修改,在xml中设置Orientation属性是不顶用的。
Configuration cfg = getResources().getConfiguration(); boolean hor = cfg.orientation == Configuration.ORIENTATION_LANDSCAPE; if (hor) { TabWidget tw = tabs.getTabWidget(); tw.setOrientation(LinearLayout.VERTICAL); }
d.在layou-land的文件夹下,调整sub page的layout,注意文件名一定要跟layout中的文件名相同,这样在横置手机的时候才会自动调用layout-land下的布局。
9.如何控制某些sub page下可以横竖切换,有些sub page下不可以横竖切换。
可以根据不同的情况,在onResume() 跟 onPause() 函数中分别调用下面两行代码
//恢复横竖切换
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
//设置为竖屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//同理设置为横屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
10.给tab 标签设置监听
举例:tabhost中共有3个sub tab(A, B, C)
程序启动后点击 tab 标签 A 进入 A 界面
A中点击某个button的时候会changeContent 到 a1 界面,
如果这个时候点击tab 标签 A,android默认的是不会发生变化的,仍然停留在a1界面
假如我们想点击tab 标签 A后让他回到上一级,就得给tab 标签设置监听
TabHost tabs; 。。。。。。。。 //0 是tab 标签的id tabs.getTabWidget().getChildAt(0).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (0 != tabs.getCurrentTab()) { //Journal [1]是之前add tab 的时候的标签 tabs.setCurrentTabByTag("Journal [1]"); } else { LocalActivityManager manager = getLocalActivityManager(); //SubPageJournal 这个是在add tad 的时候setContent的 activity SubPageJournal subpage = (SubPageJournal) manager .getActivity("Journal [1]"); //backMainPage()是自己写的函数,用来changeContent,类似于上面提到的initUI() subpage.backMainPage(); } } });
LocalActivityManager可以在ActivityGroup里面访问子Activity的View 并操作它去改变UI
发表评论
-
Android_SDK_NDK_JNI
2014-09-10 12:26 721Android SDK、NDK、JNI的简 ... -
如何检查apk是否签名
2012-02-22 16:46 2487Use this command : (Jarsigner i ... -
切割bitmap
2011-11-15 16:09 973Bitmap resource = BitmapFactory ... -
TextView控件属性列表
2011-10-08 15:58 1188纯属转载: http://www.cnbl ... -
元数据Meta Data
2011-09-30 16:30 1141<meta-data andr ... -
Android UI Operation in Thread
2011-09-21 17:16 1140Android UI Operation in Thread ... -
系统自带样式Android:theme
2011-06-23 15:58 2257Android应用开发——系统自带样式Android:them ... -
EditText自动获取焦点并弹出输入法的问题
2011-06-16 16:25 50431.每次启动新的Activity的时候,输入法总是弹出来,太烦 ... -
Service Broadcast BroadcastReceiver AlarmManager,Notification利用service定时/周期性发送广播
2011-05-31 16:35 38731.如题 主要实现 1.启动service,关 ... -
android硬件传感器
2011-05-30 16:07 13376纯属转载:http://dev.10086 ... -
权限permission
2011-05-27 18:03 1279纯属于转载: http://blog.csdn.net/ ... -
读写系统设置——日期与时间使用网络提供的值(时间与网络同步)
2011-05-27 17:19 2533//读_1.带默认参数的 Settings.Syste ... -
读写系统设置
2011-05-27 17:13 1808Android的很多设置想关的东西都存储在数据库中 andro ... -
Display_获取屏幕宽高
2011-05-06 12:19 975public static void intScreen(A ... -
seletctAll___利用ScrollView+RadioGroup+RadioButton实现相似互斥
2011-05-03 17:58 2091假如你有多个匹配list,在这些匹配list中存在这样的一些匹 ... -
selectAll___CheckBox in ListView
2011-05-03 17:32 14541.如果你有一个ListView,listView的 adap ... -
Layout___模块重用之include布局整合
2011-04-06 14:04 1358在Android的开发中,我们知道布局文件可以让我们很 ... -
value-string
2011-04-06 13:36 2090我们知道在android的value文件夹下,string.x ... -
利用PorterDuff.Mode做橡皮擦效果
2011-04-01 18:03 10760http://stackoverflow.com/questi ... -
常用的html特殊符号转义符
2011-03-24 14:40 2221HTML特殊转义字符列表,最常用的字符实体 Character ...
相关推荐
MainUI_TAB TAB01 实现TAB +ViewPager 效果(仅switch view,未使用fragment) TAB02 TAB+fragment TAB03 TAB+fragment+ViewPager
9. **代码组织**:对于复杂的Tab选项卡应用,可以考虑使用MVC(Model-View-Controller)或MVVM(Model-View-ViewModel)设计模式,将业务逻辑与界面展示分离,提高代码可维护性。 在www.NewXing.com提供的文件中,...
在Android开发中,`ViewGroup`、`ListView`和标题隐藏功能是常见的UI设计元素,尤其是在构建一个多标签(Tab)的应用界面时。本教程将详细解释如何实现`ListView`在多tab环境中,随着用户上滑操作使标题悬浮显示的...
3. **代码动态设置**: 如果你希望在运行时改变`Tab`的样式,可以通过`Tab`的`setIndicator()`方法来设置文字和图标,或者直接修改`Tab`的`View`对象。 4. **使用`Material Design`库**: 对于Android 5.0及以上版本...
ViewPager viewPager = findViewById(R.id.view_pager); // 设置适配器 viewPager.setAdapter(new MyFragmentPagerAdapter(getSupportFragmentManager())); // 绑定TabLayout和ViewPager tabLayout....
项目使用 angularJS ui-router-tabs angular-ui-router 实现tab页切换, 1、亮点 1)tab页间切换缓存tab页数据 2)刷新页面,保留已经打开的tab页,当前活动tab为上次活动的tab 3)使用嵌套路由,实现单页面应用
ViewPager viewPager = findViewById(R.id.view_pager); MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(adapter); tabLayout....
总的来说,实现Android UI中间凸起的Tab需要对Android系统的基本组件有深入的理解,同时需要具备一定的自定义View开发能力。通过实践这样的项目,开发者可以提升自己的技能,为构建更加独特和吸引人的应用程序打下...
TabBar组件是React-Native中用于实现Tab导航的关键组件,通常结合Navigator或其他导航库一起使用。在本例中,我们将使用`react-navigation`库,这是一个强大的React-Native导航解决方案,提供了多种导航类型,包括...
1. **自定义View**: 自定义View是Android开发中的一个重要部分,它允许开发者创建独特的UI组件。在这个项目中,`BottomTabView`就是一个自定义View,用于展示底部Tab菜单。 2. **布局设计**: 在自定义View时,通常...
在现代Android开发中,更推荐使用`ViewPager`结合`TabLayout`(来自`androidx.appcompat.widget`库)或者`BottomNavigationView`(来自`androidx.navigation.ui`库)来实现滑动Tab效果。这两种方法更稳定,且有更好...
总的来说,用UISegmentedControl模拟TabbarController效果涉及到UI组件的使用、事件处理、视图控制器的管理以及可能的动画实现。这个过程中,你可以学习到iOS应用开发中的许多核心概念,包括控制器间通信、用户交互...
这个名为"Tabú_WPF_corne63_可关闭"的项目提供了一种实现方式,使用户可以根据需要自由地打开和关闭Tab页,同时具有自适应特性,能根据界面尺寸调整布局。 首先,`Tabú`在这里可能是指该控件的独特设计或命名风格...
这可以通过重写`TabLayout.Tab`的`setCustomView()`方法实现,将自定义的`View`设置为Tab的内容。 6. **动画效果**: 为了达到微信那种平滑的滑动效果,可能还需要添加一些自定义的动画。例如,可以使用`...
`TabLayout`应放在`ViewPager`上方,并设置`app:layout_behavior="@string/appbar_scrolling_view_behavior"`,以便它们能够协同工作。 ```xml android:id="@+id/tab_layout" android:layout_width="match_...
本实例主要探讨如何使用Fragment实现Tab切换效果,这是一个常见的Android应用设计模式,尤其在构建多视图且需要在不同设备屏幕尺寸上适配的应用时更为常见。 在Android的Tab布局中,FragmentTabHost是一个常用的...
这个“仿Android4.0左右滑动切换Tab的UI的源代码”就是一个很好的示例,它展示了如何在Android应用中实现类似Android 4.0系统的Tab切换效果,让用户通过左右滑动屏幕来浏览不同的内容区域。 首先,我们来看...
总的来说,动态添加和移除View以及使用RadioButton实现底部Tab效果,是一种基础且实用的Android开发技巧。通过这种方式,开发者可以灵活地构建用户界面,适应各种应用场景,提高应用的可定制性和用户体验。
5. 设置Tab内容:通过`TabLayout.addTab()`方法为每个Tab添加内容,可以传入自定义的View或者使用`TabLayout.Tab.setText()`和`TabLayout.Tab.setIcon()`设置文字和图标。 三、自定义Tab样式 为了使Tab更符合微信的...
然而,QQTab切换特效并不是这些原生组件的简单使用,而是通过自定义View来实现的。自定义View可以让我们自由地设计和控制UI的行为和样式,以达到更个性化的交互效果。 1. 自定义View:创建一个新的`View`或`...