(Android新手上路)actionbar完全自定义标题布局,告别繁琐的actionbar设置,看别人的然后自己琢磨出来的
2017-02-21 11:37
519 查看
首先:定义actionbar的样式:styles.xml
<style name="AppTheme"
parent="AppBaseTheme">
<item name="android:actionBarStyle">@style/myActionBarStyle</item>
</style>
<style name="myActionBarStyle" parent="android:Widget.ActionBar" >
<item name="android:background">@color/blue</item> <!--设置--背景颜色>
<item name="android:titleTextStyle">@style/ActionBarTitle</item>
</style>
<!--以下内容可以不要,因为自定义的不需要用到系统默认的home,title等-->
<style name="ActionBarTitle" parent="@android:style/TextAppearance.Holo.Large">
<item name="android:textColor">@android:color/holo_blue_bright</item>
<item name="android:textSize">20sp</item>
</style>
<style name="CustomActionBar" parent="@android:style/Widget.DeviceDefault.ActionBar">
<item name="android:titleTextStyle">@style/ActionBarTitle</item>
<item name="android:subtitleTextStyle">@style/ActionBarSubtitle</item>
</style>
<style name="ActionBarSubtitle" parent="@android:style/TextAppearance.Holo.Medium">
<item name="android:textColor">@android:color/holo_blue_light</item>
<item name="android:textSize">16sp</item>
</style>
然后:manifest 修改
<activity
android:name="stu.main.StuMainOneActivity"
android:label="@string/title_activity_one"
android:theme="@style/AppTheme"//添加的style
>
</activity>
其次:自定义actionbar的layout
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/title"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerInParent="true"
android:text="标题"
4000
android:gravity="center"
android:textSize="20sp"
android:textColor="#ffffff"/>
<ImageView
android:id="@+id/back"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:background="@color/blue"
android:src="@drawable/back"/>
<ImageView
android:id="@+id/list"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/title"
android:background="@color/blue"
android:src="@drawable/list" />
</RelativeLayout>
如下:
最后:activity调用
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity_one);
setCustomActionBar();
}
private void setCustomActionBar() {
ActionBar.LayoutParams lp =new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT, Gravity.CENTER);
View mActionBarView = LayoutInflater.from(this).inflate(R.layout.actionbar_layout, null); //加载自定义的layout
ActionBar actionBar = getActionBar();
actionBar.setCustomView(mActionBarView, lp);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowHomeEnabled(false); //关闭系统的home图标显示,必须的
actionBar.setDisplayShowTitleEnabled(false);//关闭系统的title显示,不然自定义的title显示不出来
ImageView iv1 = (ImageView) mActionBarView.findViewById(R.id.back);//加载自定义标题中的textview
TextView tv1 = (TextView) mActionBarView.findViewById(R.id.title);//[b]加载自定义imageview[/b]
tv1.setText("内容");//设置标题内容
tv1.setOnClickListener(new OnClickListener() {//也可以添加点击等
@Override
public void onClick(View v) {
// TODO 自动生成的方法存根
Toast.makeText(StuMainOneActivity.this,"别点啦",Toast.LENGTH_SHORT).show();
}
});
}
注:关于系统的onOptionsItemSelected和onCreateOptionsMenu必须删除,不然显示会混乱
<style name="AppTheme"
parent="AppBaseTheme">
<item name="android:actionBarStyle">@style/myActionBarStyle</item>
</style>
<style name="myActionBarStyle" parent="android:Widget.ActionBar" >
<item name="android:background">@color/blue</item> <!--设置--背景颜色>
<item name="android:titleTextStyle">@style/ActionBarTitle</item>
</style>
<!--以下内容可以不要,因为自定义的不需要用到系统默认的home,title等-->
<style name="ActionBarTitle" parent="@android:style/TextAppearance.Holo.Large">
<item name="android:textColor">@android:color/holo_blue_bright</item>
<item name="android:textSize">20sp</item>
</style>
<style name="CustomActionBar" parent="@android:style/Widget.DeviceDefault.ActionBar">
<item name="android:titleTextStyle">@style/ActionBarTitle</item>
<item name="android:subtitleTextStyle">@style/ActionBarSubtitle</item>
</style>
<style name="ActionBarSubtitle" parent="@android:style/TextAppearance.Holo.Medium">
<item name="android:textColor">@android:color/holo_blue_light</item>
<item name="android:textSize">16sp</item>
</style>
然后:manifest 修改
<activity
android:name="stu.main.StuMainOneActivity"
android:label="@string/title_activity_one"
android:theme="@style/AppTheme"//添加的style
>
</activity>
其次:自定义actionbar的layout
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/title"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerInParent="true"
android:text="标题"
4000
android:gravity="center"
android:textSize="20sp"
android:textColor="#ffffff"/>
<ImageView
android:id="@+id/back"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:background="@color/blue"
android:src="@drawable/back"/>
<ImageView
android:id="@+id/list"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/title"
android:background="@color/blue"
android:src="@drawable/list" />
</RelativeLayout>
如下:
最后:activity调用
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity_one);
setCustomActionBar();
}
private void setCustomActionBar() {
ActionBar.LayoutParams lp =new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT, Gravity.CENTER);
View mActionBarView = LayoutInflater.from(this).inflate(R.layout.actionbar_layout, null); //加载自定义的layout
ActionBar actionBar = getActionBar();
actionBar.setCustomView(mActionBarView, lp);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowHomeEnabled(false); //关闭系统的home图标显示,必须的
actionBar.setDisplayShowTitleEnabled(false);//关闭系统的title显示,不然自定义的title显示不出来
ImageView iv1 = (ImageView) mActionBarView.findViewById(R.id.back);//加载自定义标题中的textview
TextView tv1 = (TextView) mActionBarView.findViewById(R.id.title);//[b]加载自定义imageview[/b]
tv1.setText("内容");//设置标题内容
tv1.setOnClickListener(new OnClickListener() {//也可以添加点击等
@Override
public void onClick(View v) {
// TODO 自动生成的方法存根
Toast.makeText(StuMainOneActivity.this,"别点啦",Toast.LENGTH_SHORT).show();
}
});
}
注:关于系统的onOptionsItemSelected和onCreateOptionsMenu必须删除,不然显示会混乱
相关文章推荐
- ActionBar设置自定义布局使文字居中
- 自定义Android标题栏TitleBar布局(转载)
- android 自定义adapter extends BaseAdapter,做有自己布局的listView
- Android自定义titlebar中设置progressbar
- mono for android 自定义titleBar Actionbar 顶部导航栏 修改 样式 学习
- Android ActionBar完全解析,使用官方推荐的最佳导航栏(下)
- android actionbar viewpager 实现类微信主界面布局
- 获得所有联系人信息。。。随便用,我也是借鉴别人的然后自己写出来的
- Android:自定义Activity基类,复用布局/控件,减少设置控件的重复代码,onPostOnCreate
- android 自定义adapter extends BaseAdapter,做有自己布局的listView
- 自定义Dialog,仿造别人写的,内容有些不同,完全自己定制
- Android 自定义ActionBar.Tab对象的表现
- Android自定义action并对此设置permission
- Android 弹无虚发之第二弹:Android ActionBar 的其它用法(搜索、分享、隐藏复杂布局,模仿Google Play,微信)
- 软件项目经理新手上路11 - 找不到自己,看不见别人 推荐
- 软件项目经理新手上路 - 找不到自己,看不见别人
- android快捷设置标题样式布局
- android 设置dialog中的布局(自定义布局)
- Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)
- Android 弹无虚发之第五弹:来点儿不一样的Toast(自定义Toast,设置Toast显示位置,自定义Toast的复杂布局)