java 自定义活动主题和动作条样式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 自定义活动主题和动作条样式相关的知识,希望对你有一定的参考价值。

自定义Activity主题和ActionBar样式
   在新建的android工程的res/values/styles.xml添加自定义ActionBar样式的代码和自定义Activity主题的代码,并在AndroidMainfest.xml中给需要使用该自定义ActionBar的Activity中加入该主题:
(1)自定义ActionBar样式代码如下:
    <!-- 自定义ActionBar样式,重设ActionBar背景,隐藏actionbar左侧的应用图标和标题 -->
    <style name="actionbar_def_style" parent="@android:style/Widget.Holo.Light.ActionBar">
        <!-- 在样式里面直接替换掉actionbar的背景,避免在有的窗口进入慢时导致进入时显示系统默认的actionbar -->  
        <item name="android:background">@drawable/actionbar_background</item>
       	<!-- 在样式里面去掉acionbar的应用图标和标题 -->
        <item name="android:displayOptions">useLogo</item>
    </style>
(2)自定义Activity主题代码如下:
    <!-- 自定义窗口样式,需要带ActionBar -->
    <style name="ActivityTheme_Light" parent="android:Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/actionbar_def_style</item> 
    </style>
(3)在AndroidManifest.xml文件中需要使用该自定义ActionBar的Activity中加入该主题如下:
      <activity
            android:name="com.zmy.actionbarstyle.DiyActionBarActivity"
            android:theme="@style/ActivityTheme_Light"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
2
在Activity中加载ActionBar的自定义布局
(1)ActionBar加载自定义布局的代码封装如下:
/**
* 设置ActionBar的布局
* @param layoutId 布局Id
* 
* */
public void setActionBarLayout( int layoutId ){
    ActionBar actionBar = getActionBar( );
    if( null != actionBar ){
        actionBar.setDisplayShowHomeEnabled( false );
        actionBar.setDisplayShowCustomEnabled(true);
        LayoutInflater inflator = (LayoutInflater)   this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = inflator.inflate(layoutId, null);
        ActionBar.LayoutParams layout = new     ActionBar.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
        actionBar.setCustomView(v,layout);
    }
}
(2)在onCreate()方法中调用该方法,并传入自定义的布局文件ID:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_diy_action_bar);
    // 自定义actionbar的布局
    setActionBarLayout( R.layout.actionbar_port_layout );
}
(3)自定义布局文件“actionbar_port_layout.xml ”代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="63.0dp"
    android:id="@+id/actionbarLayoutId"
    android:background="@drawable/actionbar_background">
    <ImageButton
        android:id="@+id/menuBtnId"
        android:layout_marginLeft="12.0dp"
        android:layout_marginTop="12.0dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/menu"
        android:contentDescription="@string/app_name"
        android:onClick="onClick"
        />
    <ImageButton 
        android:id="@+id/noteBtnId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="12.0dp"
        android:background="@drawable/notes"
        android:contentDescription="@string/app_name"
        android:layout_marginRight="12.0dp"
        android:layout_alignParentRight="true"
        android:onClick="onClick"
        />
    <ImageButton 
        android:id="@+id/editBtnId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="12.0dp"
        android:background="@drawable/edit"
        android:layout_toLeftOf="@id/noteBtnId"
        android:layout_marginRight="12.0dp"
        android:contentDescription="@string/app_name"
        android:onClick="onClick"
        />
    <ImageButton 
        android:id="@+id/downloadBtnId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="12.0dp"
        android:background="@drawable/download"
        android:layout_toLeftOf="@id/editBtnId"
        android:layout_marginRight="12.0dp"
        android:contentDescription="@string/app_name"
        android:onClick="onClick"
        />
</RelativeLayout>
3
在Action中监听ActionBar中按钮的点击事件
/**
* 实现onClick方法,在这里面监听actionbar中按钮的点击事件 
* 
* */
public void onClick( View v ){
    switch( v.getId( ) ){
    case R.id.menuBtnId:{
        showToast( this, "menuBtn" );
    }
    break;
    case R.id.noteBtnId:{
         showToast( this, "noteBtn" );
    }
    break;
    case R.id.downloadBtnId:{
         showToast( this, "downloadBtn" );
    }
    break;
    case R.id.editBtnId:{
        showToast( this, "editBtn" );
    }
    break;
    default:{
    }
    break;
    }
}

以上是关于java 自定义活动主题和动作条样式的主要内容,如果未能解决你的问题,请参考以下文章

如何使用现有自定义主题在 XML 中隐藏 Activity 的标题栏

WPF中使用WebBrowser控件,怎么自定义它的滚动条样式

在QtQuick中自定义样式[重复]

自定义属性未在样式和主题中解析

如何在原生基础中更改主题?

如何自定义TimePicker的样式