本文的目的是介绍如何在android中的actionbar文本顶部添加图标的详细情况,特别关注安卓actionbar添加按钮的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面
本文的目的是介绍如何在android中的actionbar文本顶部添加图标的详细情况,特别关注安卓actionbar添加按钮的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解如何在android中的actionbar文本顶部添加图标的机会,同时也不会遗漏关于ActionBar / Tabs中的Android自定义主题、ActionBar菜单项的动态可绘制图标? (Android,ActionBarSherlock)、Android 1.6中的ActionBar、Android 4.3中的自定义ActionBar文本外观的知识。
本文目录一览:- 如何在android中的actionbar文本顶部添加图标(安卓actionbar添加按钮)
- ActionBar / Tabs中的Android自定义主题
- ActionBar菜单项的动态可绘制图标? (Android,ActionBarSherlock)
- Android 1.6中的ActionBar
- Android 4.3中的自定义ActionBar文本外观
如何在android中的actionbar文本顶部添加图标(安卓actionbar添加按钮)
private void setActionBar() { ActionBar bar = getActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); bar.setdisplayShowHomeEnabled(false); bar.setdisplayShowTitleEnabled(false); ActionBar.Tab tabA = bar.newTab().setText("TabA"); tabA.setIcon(R.drawable.iconA); ActionBar.Tab tabB = bar.newTab().setText("TabB"); tabB.setIcon(R.drawable.iconB); ActionBar.Tab tabC = bar.newTab().setText("TabC"); tabC.setIcon(R.drawable.iconC); }
解决方法
>定义自定义布局,其中您的文本上方有图像
>在您的活动中,为视图充气并设置图像和文本的值
>为选项卡设置自定义视图
这是一个粗略的例子:
定制布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical" > <ImageView android:id="@+id/tabIcon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:paddingTop="2dp" /> <TextView android:id="@+id/tabText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:textColor="#FFFFFF" /> </LinearLayout>
通货膨胀视图
View tabView = activity.getLayoutInflater().inflate(R.layout.actiobar_tab,null); TextView tabText = (TextView) tabView.findViewById(R.id.tabText); tabText.setText(R.String.sometext); ImageView tabImage = (ImageView) tabView.findViewById(R.id.tabIcon); tabImage.setimageDrawable(activity.getResources().getDrawable(R.drawable.someimage));
设置GIVEN TAB的定制视图
Tab tab = actionBar.newTab().setCustomView(tabView)
ActionBar / Tabs中的Android自定义主题
标签现在设置为白色背景,浅灰色文本 – 非常难以理解.我只想将文本更改为更深,更暗.
我搜索了样式,看看我是否可以覆盖,但我能做的就是改变背景,而不是文本.
我可以在styles.xml中执行此操作,还是必须以编程方式执行此操作?
解决方法
<!-- The theme for the activity --> <style name="TabSpecialTheme" parent="android:Theme.Holo.Light.DarkActionBar"> <item name="@android:attr/actionBarTabTextStyle">@style/TabStyle</item> </style> <!-- Modify the text color --> <style name="TabStyle" parent="android:Widget.Holo.Light.ActionBar.TabText.Inverse"> <item name="android:textColor">#F70000</item> </style>
当然不要忘记将活动的主题设置为清单中的@ style / TabSpecialTheme.
ActionBar菜单项的动态可绘制图标? (Android,ActionBarSherlock)
我在我的Android应用程序中使用ActionBarSherlock,目标是API级别10.我的应用程序用于移动数据捕获,有时用户无法立即提交新数据,但必须在手机上本地保存(例如,当连接性较差时).
每当手机本地存储“未提交”项目时,我想向用户显示一个菜单项(在操作栏中),以便他们可以点击进入UnsubmittedItems活动并手动触发上传.
理想情况下,此菜单项将包含未提交项目数量的图形表示(类似于电子邮件或短信应用程序如何显示未读邮件的数量作为徽章).目前,我只是在做:
unsubmittedMenuItem.setTitle( Integer.toString(numUnsubmitted) );
这有用,但有两个问题:我更喜欢使用Icon并将Title保持为可理解的东西(“未提交”),而且,我也希望在这里有一些自定义布局或设计,例如红圈数字背后的背景.
关于如何实现这一点的想法?到目前为止我的研究提出了两种可能
>使用为某些数字范围(例如1,2,3 …… 10)预先创建的级别列表drawable,然后使用unsubmittedMenuItem.getIcon().setLevel(numUnsubmitted)
>使用Bitmap和Canvas API完全动态地构建整个位图
这些是相似的,我将文本渲染成位图(像#1一样离线或像#2那样在飞行中)但是如果可能的话,利用ActionBar的“原生”文本渲染会很棒像在TextView中一样在它后面插入一个红色圆圈.
有没有办法为图标drawable设置自定义布局? (不是完整的actionLayout,仅用于图标?)
解决方法
>使用LayerDrawable
并在徽标图像顶部堆叠徽章图像.>编写一个从Drawable扩展的自定义类,并手动绘制图标和徽章.>在ImageView中使用带有图标的自定义操作项视图,并使用TextView覆盖徽章.
Android 1.6中的ActionBar
我的应用程式中有这个来源:
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
setTheme(getHoneycombStyle());
ActionBar actionBar = getActionBar();
if (actionBar != null) {
actionBar.setCustomView(R.layout.ACTION_BAR);
}
}
}
它可以在Honeycomb,Android 2.1、2.2和2.3中正常工作,但是在Android 1.6中则无法工作.尽管我已经检查了SDK版本,但该应用程序返回此异常:
08-31 18:23:33.063: ERROR/AndroidRuntime(3262): Uncaught handler: thread main exiting due to uncaught exception
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): java.lang.VerifyError: com.eldan.introducing.activity.IBBaseCompActivity
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at java.lang.class.newInstanceImpl(Native Method)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at java.lang.class.newInstance(Class.java:1472)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.app.Instrumentation.newActivity(Instrumentation.java:1097)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2316)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.app.ActivityThread.startActivityNow(ActivityThread.java:2242)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.app.LocalActivityManager.movetoState(LocalActivityManager.java:127)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:631)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.widget.TabHost.setCurrentTab(TabHost.java:317)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:127)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:346)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.view.View.performClick(View.java:2344)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.view.View.onTouchEvent(View.java:4133)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.view.View.dispatchTouchEvent(View.java:3672)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:850)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:882)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at com.android.internal.policy.impl.PhoneWindow$DecorView.superdispatchTouchEvent(PhoneWindow.java:1712)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at com.android.internal.policy.impl.PhoneWindow.superdispatchTouchEvent(PhoneWindow.java:1202)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.app.Activity.dispatchTouchEvent(Activity.java:1987)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1696)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.view.ViewRoot.handleMessage(ViewRoot.java:1658)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.os.Handler.dispatchMessage(Handler.java:99)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.os.Looper.loop(Looper.java:123)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at android.app.ActivityThread.main(ActivityThread.java:4203)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at java.lang.reflect.Method.invokeNative(Native Method)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at java.lang.reflect.Method.invoke(Method.java:521)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
08-31 18:23:33.083: ERROR/AndroidRuntime(3262): at dalvik.system.NativeStart.main(Native Method)
听起来编译器在我的onCreate方法中检测到ActionBar源,而Android 1.6不支持它.但是我不太确定如何解决这个问题.
解决方法:
您无法在加载到旧版Android VM中的代码中引用新版Android中的类或方法.
您有两个主要选择:
>将ActionBar代码隔离到一个单独的实用工具类中,并且仅当您在Honeycomb上时才使用该类,具体取决于android.os.Build. Here is a sample project演示了通过隔离在仅用于Honeycomb的HoneycombHelper类中的getActionView()调用,利用getActionView()将自定义布局放入可用于Honeycomb和更旧版本的操作栏中.
>使用ActionBarSherlock访问操作栏.它将为您提供Honeycomb上的本机操作栏,以及旧版Android上的工作方式.
Android 4.3中的自定义ActionBar文本外观
<style name="myTheme.ActionBar.Text" parent="@android:style/TextAppearance"> <item name="android:textColor">#ff2d2d2d</item> <item name="android:textSize">26sp</item> <item name="android:fontFamily">sans-serif-condensed</item> <item name="android:textAllCaps">true</item> <item name="android:textStyle">bold</item> </style>
无论如何,在我测试过的大多数设备中,一切都运行良好(3个要精确)但是1,运行Android 4.3(Sony Xperia Z)的设备没有应用样式.我后来在运行4.3的模拟器上测试了它并得到了相同的结果.
有没有办法解决这个问题?
这是应用程序的完整样式
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- Base application theme. --> <style name="AppTheme" parent="android:Theme.Holo.Light"> <item name="android:actionBarStyle">@style/myTheme.ActionBar</item> <!-- Customize your theme here. --> <item name="android:textViewStyle">@style/RobotoTextViewStyle</item> <item name="android:buttonStyle">@style/RobotoButtonStyle</item> <item name="android:editTextBackground">@drawable/apptheme_edit_text_holo_dark</item> <item name="android:actionBarItemBackground">@drawable/nav_list_selector</item> </style> <style name="RobotoTextViewStyle" parent="android:Widget.TextView"> <item name="android:fontFamily">sans-serif-light</item> </style> <style name="RobotoButtonStyle" parent="android:Widget.Holo.Button"> <item name="android:fontFamily">sans-serif-light</item> </style> <style name="myTheme.ActionBar" parent="@android:style/Widget.Holo.Light.ActionBar"> <item name="android:titleTextStyle">@style/myTheme.ActionBar.Text</item> <item name="android:background">@drawable/action_bar_bg</item> <item name="android:searchButtonText">SEARCH</item> <item name="android:editTextBackground">@drawable/apptheme_edit_text_holo_dark</item> </style> <style name="myTheme.ActionBar.Text" parent="@android:style/TextAppearance"> <item name="android:textColor">#ff2d2d2d</item> <item name="android:textSize">26sp</item> <item name="android:fontFamily">sans-serif-condensed</item> <item name="android:textAllCaps">true</item> <item name="android:textStyle">bold</item> </style> </resources>
解决方法
让我们为动作栏创建一个自定义视图
RES /布局/ action_title_view.xml
<?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" android:background="@android:color/transparent" > <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:ellipsize="end" android:maxLines="1" android:text="" android:textAllCaps="true" android:textSize="16sp" android:textColor="@color/actionbar_text" /> </RelativeLayout>
在活动onCreate中设置自定义操作栏
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // set action bar custom view getActionBar().setdisplayShowCustomEnabled(true); getActionBar().setdisplayShowTitleEnabled(false); LayoutInflater inflator = (LayoutInflater) this .getSystemService(Context.LAYOUT_INFLATER_SERVICE); mCustomActionView = inflator.inflate(R.layout.action_title_view,null); // assign the view to the actionbar getActionBar().setCustomView(mCustomActionView); ... }
现在覆盖活动的setTitle方法
@Override public void setTitle(CharSequence title) { mTitle = title; ((TextView) mCustomActionView.findViewById(R.id.title)).setText(mTitle); getActionBar().setTitle(""); }
使用setTitle方法设置自定义操作栏文本.希望这可以帮助.
今天关于如何在android中的actionbar文本顶部添加图标和安卓actionbar添加按钮的介绍到此结束,谢谢您的阅读,有关ActionBar / Tabs中的Android自定义主题、ActionBar菜单项的动态可绘制图标? (Android,ActionBarSherlock)、Android 1.6中的ActionBar、Android 4.3中的自定义ActionBar文本外观等更多相关知识的信息可以在本站进行查询。
本文标签: