android 中actionbar ,menu,Listview 风格自定义札记

来源:互联网 发布:腾讯云服务器开放端口 编辑:程序博客网 时间:2024/05/16 05:00

1:透明actionbar,透出背景沉浸式(沉浸式actionbar)

       第一步:让内容区域扩张到actionbar

                 方法1:java代码实现
                               在oncreate中:getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
                 方法2:style实现

                               使用对应activity的 在style中加入: <item name="android:windowActionBarOverlay">true</item> 

       第二步:悬浮actionbar

                 方法1:java 代码实现:
                               ActionBar actionBar = getActionBar();
                               actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#00000000")));
                               //navigationbar背景色一致,需要添加一行代码:
                               actionBar.setSplitBackgroundDrawable(new ColorDrawable(Color.parseColor("#00000000")));

(注意:如果需要完全透明上面可能会失效可以使用下面这个方法:infinix_actionbar_bg这个图片需要透明色 getActionBar().setBackgroundDrawable(this.getBaseContext().getResources().getDrawable(R.drawable.infinix_actionbar_bg));)

                 方法2:使用theme 在style中实现:
                              <resources>
                                        <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
                                                 <item name="android:windowActionBarOverlay">true</item>
                                                 <!-- 让actionbar悬浮 -->
                                                 <item name="android:actionBarStyle">@style/my_actionbar_style</item>
                                        </style>
                                        <style name="my_actionbar_style" parent="@android:style/Widget.Holo.Light.ActionBar">
                                        <!-- 设置actionbar 背景色 透明 -->
                                                  <item name="android:background">#80000000</item>
                                                  <item name="android:backgroundStacked">#66666</item>
                                                  <item name="android:backgroundSplit">#80000000</item>
                                         </style>
                                </resources>

2:修改actionbar 的title的字体颜色

         继续上面自定义的actionbar style修改android:titleTextStyle属性

         <style name="my_actionbar_style" parent="@android:style/Widget.Holo.Light.ActionBar">
         <!-- 设置actionbar 背景色 透明 -->
         <item name="android:background">#33000000</item>
         <item name="android:backgroundStacked">#346c36</item>
         <item name="android:backgroundSplit">#33000000</item>
         <item name="android:titleTextStyle">@style/MyActionBarTitleText</item>
         </style>
 
         <style name="MyActionBarTitleText">
         <item name="android:textColor">@android:color/white</item>
         </style>

       另外的修改actionbar左边的返回箭头
        /// M: add by hss for actionbar back UI @{
       actionBar.setHomeAsUpIndicator(R.drawable.infinix_icon_back_click);
         ///:M--@}
       或者使用该activity的style配置:
       <style name="style_titlebar_normal" parent="Theme.AppCompat.Light">
        <item name="android:homeAsUpIndicator">@drawable/back</item> <!--返回icon-->
       </style>
      

3:全透到navigationnar上面 

      需要注意的是如果对应style设置了android:colorPrimaryDark,可能对navigationbar透明有所影响,将它改为透明00000000就可以了。

      在oncreate方法里面加入如下代码:

            window.requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
                    | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(Color.TRANSPARENT);
            window.setNavigationBarColor(Color.TRANSPARENT);
    getActionBar().setBackgroundDrawable(this.getBaseContext().getResources().

            getDrawable(R.drawable.infinix_actionbar_bg));//使用透明背景图片infinix_actionbar_bg设置actionbar

4:自定义actionbar 上面的menu

          1:修改menu的背景颜色与字体,背景修改android:popupMenuStyle的风格,字体修改android:textAppearanceLargePopupMenu

           <style name="MusicBrowserTheme" parent="@android:style/Theme.Material">
           <item name="android:colorPrimaryDark">@color/theme_primarydark_color</item>
           <item name="android:colorPrimary">@color/theme_primary_color</item>
           <item name="android:actionBarStyle">@style/MusicBrowserActionBarStyle</item>
           <item name="android:actionOverflowButtonStyle">@style/FmOverflowButtonStyle</item>
           <item name="android:popupMenuStyle">@style/PopupMenu2</item>
   <item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>
           </style>pupMenuTextAppearanceLarge" parent="@android:style/TextAppearance.DeviceDefault.Widget.PopupMenu.Large">

    <item name="android:textColor">#444444</item>
    <item name="android:textSize

           </style>
           <style name="PopupMenu2"  parent="@android:style/Widget.Material.Light.PopupMenu">
           <!--item name="android:popupBackground">@drawable/menu_popup_panel_holo_light</item-->
           <item name="android:popupBackground">#fafafa</item>
           </style>

           <style name="myPo">16sp</item>
           </style>

5:listview 自定义风格

         1:自定义分割线,left,right左右边距偏移量,color线条颜色
               第一步:创建infinix_main_list_divider_line.xml
               <?xml version="1.0" encoding="utf-8"?>  
                  <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >  
                            <item  
                                    android:left="16dp"  
                                    android:right="16dp">  
                                    <shape android:shape="rectangle" >  
                                            <solid android:color="#e1e1e1" />  
                                    </shape>  
                           </item>  
                 </layer-list> 

                 第二步:将上面xml作为背景加入listview的android:divider属性

                 <ListView
                          android:id="@+id/station_list"
                          android:layout_width="match_parent"
                          android:layout_height="match_parent" 
                          android:divider="@drawable/infinix_main_list_divider_line"
                          android:dividerHeight="0.5dp"/>

          2:修改分割线高度

                android:dividerHeight="0.5dp"

                注意:如果是设置每个item的高度,则只要修改对应item布局文件

6:ExpandableListView树型listview替换向上向下箭头

   第一步:在drawable中建立expandablelistview_indicator.xml

                 <?xml version="1.0" encoding="utf-8"?>

                          <selector xmlns:android="http://schemas.android.com/apk/res/android">

                          <item android:state_expanded="true" android:drawable="@drawable/up_indicator" />

                          <item android:state_expanded="false" android:drawable="@drawable/down_indicator" />

                          </selector>

   第二步:在代码中使用该配置图片

                   ExpandableListView lv = getExpandableListView();

                   lv.setGroupIndicator(this.getResources().getDrawable(R.drawable.expandablelistview_indicator));


6:改变tabhost 的单个tab项的长宽秘籍,专治各种通过代码addTab()

第一步:布局中TabWidget的layout_width与layout_height设置为"wrap_content
<TabWidget
            android:id="@android:id/tabs"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
第二步:代码中获取子项设置宽高即可
        mTabHost.getTabWidget().getChildAt(0).getLayoutParams().width = 100;//第一个tab项
        mTabHost.getTabWidget().getChildAt(1).getLayoutParams().width = 200;//第二个tab项

       有个更加强大的方法:

         private void updateTab(final TabHost tabHost) {
              for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) {
                   View view = tabHost.getTabWidget().getChildAt(i);
                   LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(300, 120);
                   params.setMargins(60, 0, 60, 0);//设置Tab之间的间隔
                   view.setLayoutParams(params);
                   TextView tv = (TextView) tabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title);
                   // tv.setTextSize(16);//设置标题字体大小
                   // tv.setTypeface(Typeface.SERIF, 2); // 设置字体和风格
                   if (tabHost.getCurrentTab() == i) {//选中
                              tv.setTextColor(this.getResources().getColorStateList( R.color.app_blue));//Tab被选中的时候标题的颜色
                   } else {//不选中
                              tv.setTextColor(this.getResources().getColorStateList( android.R.color.black));//Tab被不选中的时候标题的颜色
                   }
                 }
              }

0 0
原创粉丝点击