改变圆圈样式,自定义shape
1
| android:drawableLeft、Right、Top、Bottom 调用该图片
|
创建selector,设置check 属性对应的图片即可
选中的设置 checked、selected属性
默认的不用设置属性(一定要放在最下面)
1 2 3
| <item android:state_selected="true" android:drawable="@drawable/选中的图" /> <item android:state_checked="true" android:drawable="@drawable/选中的图" /> <item android:drawable="@drawable/不选中的图" />
|
1 2 3 4 5 6 7 8 9 10 11
| @Override public void onClick(View v) {
if(index == 0){ btn1.setSelected(true); btn2.setSelected(false); . . btn10.setSelected(false); } }
|
背景
RadioGroup由于是继承LinearLayout,无法使RadioButton靠右布局。
可以在两个button间添加width为0dp的space实现RadioButton靠右
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| <RadioGroup android:id="@+id/rgHandleButtons" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/llContainer" android:background="@color/common_system_style_gray" android:orientation="horizontal" android:paddingBottom="@dimen/common_layout_margin_15dp" android:paddingTop="@dimen/common_layout_margin_15dp" android:visibility="@{data.holiday.status==HandleHolidayStatus.NONE.getValue()&&data.getHoliday().getAudittype() ==HolidayAuthType.CHECK.getValue()?View.VISIBLE:View.GONE}">
<RadioButton android:id="@+id/btnAgree" android:layout_width="110dp" android:layout_height="44dp" android:layout_alignParentLeft="true" android:layout_marginLeft="27.5dp" android:background="@drawable/common_button_enable_bg_shape" android:button="@null" android:gravity="center" android:text="@string/common_text_agree" android:textColor="@color/common_text_white" android:textSize="@dimen/text_size_17dp" android:visibility="@{data.holiday.status==HandleHolidayStatus.NONE.getValue()?View.VISIBLE:View.GONE}" />
<Space android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" />
<RadioButton android:id="@+id/btnDisagree" android:layout_width="110dp" android:layout_height="44dp" android:layout_alignParentRight="true" android:layout_gravity="right" android:layout_marginRight="27.5dp" android:background="@drawable/teach_kq_button_enable_bg_shape" android:button="@null" android:gravity="center" android:text="@string/common_text_disagree" android:textColor="@color/common_text_red" android:textSize="@dimen/text_size_17dp" android:visibility="@{data.holiday.status==HandleHolidayStatus.NONE.getValue()?View.VISIBLE:View.GONE}" />
</RadioGroup>
|
Checkbox
总结
选中效果必须与HashMap、HashSet等结合使用
1.在item点击事件里将position、数据保存在hashmap即可。
2.通过判断HashMap里面是否含有该值来设置是否选中。
示例 - ListView中实现单选
使用一个ImageView代替Checkbox
创建一个HashMap<Integer,Long> //通过position做key保存id
在点击事件里,每点击一次将原有的数据清空,再重新加入值(保证hashmap集合只包含一个值。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { selectItem.clear(); selectItem.put(position,user.getUserId()); mAdapter.notifyDataSetChanged(); } });
if(selectIten.keySet().contains(position)){ holder.ivCheck.setVisibility(View.VISIBLE); }else{ holder.ivCheck.setVisibility(View.GONE); }
|
SearchView
SearchView
CardView
属性 |
说明 |
app:contentPadding |
卡片的内边距 |
app:cardCornerRadius |
卡片的圆角大小 |
app:cardElevation |
阴影的大小 |
app:cardMaxElevation |
阴影最大高度 |
app:cardBackgroundColor |
卡片背景色 |
app:cardUseCompatPadding=”true” |
使其显示卡片的样式 |
app:cardPreventCornerOverlap=”true” |
在V20和之前的版本中添加内边距,防止内容和边角的重叠 |
理解
1.CardView(卡片布局)是继承FrameLayout的一个ViewGroup。
2.将子ViewGroup放在其标签中即有卡片的效果。
PhotoPick
步骤
1.复制photopick文件包
2.修改Gradle、AndroidManifest(PhotoPickActivity改成有ActionBar的主题)、ImageLoader以及PhotoDetail布局文件里的自定义View。
3.复制anim、drawable、menu、strings、dimen、layout
Switch更换滑块的颜色
1 2 3 4 5 6 7 8 9
| <android.support.v7.widget.SwitchCompat android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="@dimen/margin_15dp" android:checked="true" app:theme="@style/SwitchStyle" app:thumbTint="@color/text_color_selector_blue_white" />
|
1 2 3 4 5
| <style name="SwitchStyle" parent="Theme.AppCompat.Light"> <item name="colorControlActivated">#02c1c9</item> <item name="colorSwitchThumbNormal">#cc0000</item> </style>
|
ToolBar是Google基于Android5.0新推出的一个标题栏控件。它是基于Material Design设计的。极具灵活性。
通常与CoordinatorLayout、AppBarLayout联合使用。达到滑动隐藏的效果。
实例 - 滑动隐藏标题栏
滑动隐藏标题栏必须以CoordinatorLayout为根布局。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="io.tanjungang.github.social.video.VideoFragment">
<android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar android:id="@+id/main.toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_scrollFlags="scroll" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior">
<TextView android:id="@+id/tvTest" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" />
</android.support.v4.widget.NestedScrollView> </android.support.design.widget.CoordinatorLayout>
|
1 2 3 4 5 6 7 8 9 10 11 12
| public class TestActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); TextView tvTest = (TextView) findViewById(R.id.tvTest); String text = "fasdhjfkhasdjkhfjkasdhjklfyasdjyfoeuiwyruioyqweoiryqouiwey。。"; tvTest.setText(text); } }
|
AppBarLayout属性
app:contentScrim=”” 可以设置折叠后的toolBar的颜色
app:layout_scrollFlags=”” 可以在某个滚动View(一般是Scrollview)滚动时使其子View进行改变.
值snap: 根据view显示的多少决定是展开还是收缩。
值scroll:可以使子View跟随滚动事件。(相当于将该View作为Scrollview的Header)
值enterAlways:有下滑操作时,让子View立即显示。一般结合scroll使用(即可显示,由上往下切入)
值enterAlwaysCollapsed:下滑时,先显示ToolBar,直到滑到顶端才显示完整的layout。需设置minheight
值exitUntilCollapsed:AppBarLayout折叠,背景消失,ToolBar保留。
NestedScrollView如何绑定AppBarLayout呢, 需要用到CoordinatorLayout的behavior属性。app:layout_behavior=”@string/appbar_scrolling_view_behavior”
CollapsingToolbarLayout属性
app:layout_collapseMode=”” 可以设置子View的标识使其产生某种行为。
pin:有该标志位的View在页面滚动的过程中会一直停留在顶部,比如Toolbar可以被固定在顶部。
parallax:有该标志位的View表示能和页面同时滚动。与该标志位相关联的一个属性是:layout_collapseParallaxMultiplier,该属性是视差因子,表示该View与页面的滚动速度存在差值,造成一种相对滚动的效果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
<android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content">
<android.support.design.widget.CollapsingToolbarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="200dp" app:contentScrim="#e74c3c" app:expandedTitleMarginEnd="64dp" app:expandedTitleMarginStart="48dp" app:layout_scrollFlags="scroll|enterAlwaysCollapsed|enterAlways">
<android.support.v7.widget.Toolbar android:id="@+id/main.toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:minHeight="?attr/actionBarSize" app:title="TanJunDang" /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
<android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content">
<android.support.design.widget.CollapsingToolbarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="200dp" app:contentScrim="#e74c3c" app:expandedTitleMarginEnd="64dp" app:expandedTitleMarginStart="48dp" app:layout_scrollFlags="scroll|exitUntilCollapsed">
<android.support.v7.widget.Toolbar android:id="@+id/main.toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:minHeight="?attr/actionBarSize" app:title="TanJunDang" /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout>
|
BottomNavigationView的使用
理解
使用BottomNavigationView可以快速实现底部Tab的效果。
主要有下列属性
修改整个layout的背景色 app:itemBackground=”@color/color_white”
修改每个icon的颜色 app:itemIconTint=”@color/base_theme_color”
修改每个文本的颜色 app:itemTextColor=”@color/base_theme_color”
加载menu布局用于设置tab app:menu=”@menu/navigation”
使用
1.XML定义BottomNavigationView。
2.使用app:menu加载menu
3.修改tab里item的icon以及text。在res/color下新建selector,用于修改item的icon、text。使用ColorStateList加载上述selector即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.zhkj.syq.MainActivity">
<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
<FrameLayout android:id="@+id/flContent" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1"></FrameLayout>
<android.support.design.widget.BottomNavigationView android:id="@+id/bottomTab" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_gravity="bottom" android:background="?android:attr/windowBackground" app:itemBackground="@color/color_white" app:itemIconTint="@color/base_theme_color" app:itemTextColor="@color/base_theme_color" app:menu="@menu/navigation" />
</LinearLayout>
<de.hdodenhof.circleimageview.CircleImageView android:id="@+id/ivMoney" android:layout_width="90dp" android:layout_height="90dp" android:layout_gravity="bottom|center" android:src="@drawable/share_money_icon" />
</android.support.design.widget.CoordinatorLayout>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/tab_home" android:icon="@drawable/ic_home_selector" android:title="首页" />
<item android:id="@+id/tab_classify" android:icon="@drawable/ic_classify_selector" android:title="分类" />
<item android:id="@+id/tab_money" android:checkable="false" android:title="" />
<item android:id="@+id/tab_chat" android:icon="@drawable/ic_chat_selector" android:title="聊天" />
<item android:id="@+id/tab_mine" android:icon="@drawable/ic_mine_selector" android:title="我的" />
</menu>
|
1 2 3 4 5 6 7 8 9
| <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@color/base_theme_color" android:state_pressed="true"></item> <item android:color="@color/base_theme_color" android:state_selected="true"></item> <item android:color="@color/base_theme_color" android:state_checked="true"></item> <item android:color="@color/base_theme_color" android:state_focused="true"></item> <item android:color="@color/tab_text_color_disable"></item> </selector>
|
1 2 3 4 5
| Resources resource = getBaseContext().getResources(); ColorStateList csl = resource.getColorStateList(R.color.tab_text_color_selector); bottomTab.setItemTextColor(csl); bottomTab.setItemIconTintList(csl); bottomTab.setSelectedItemId(R.id.tab_home);
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| public class BottomNavigationViewTool {
public static void disableShiftMode(BottomNavigationView navigationView) {
BottomNavigationMenuView menuView = (BottomNavigationMenuView) navigationView.getChildAt(0); try { Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode"); shiftingMode.setAccessible(true); shiftingMode.setBoolean(menuView, false); shiftingMode.setAccessible(false);
for (int i = 0; i < menuView.getChildCount(); i++) { BottomNavigationItemView itemView = (BottomNavigationItemView) menuView.getChildAt(i); itemView.setShiftingMode(false); itemView.setChecked(itemView.getItemData().isChecked()); }
} catch (NoSuchFieldException | IllegalAccessException e) { e.printStackTrace(); } } }
|