最近很多小伙伴都在问android–如何在Honeycomb的ActionBar中设置下拉列表的样式?和android下拉框样式这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展An
最近很多小伙伴都在问android – 如何在Honeycomb的ActionBar中设置下拉列表的样式?和android下拉框样式这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Android 1.6中的ActionBar、Android 3.0 Honeycomb:如何在Action Bar中启用/禁用菜单项?、Android ActionBar(ActionBarCompat)Spinner下拉列表?、Android UI ActionBar 功能 - 自定义 Action Bar 样式等相关知识,下面开始了哦!
本文目录一览:- android – 如何在Honeycomb的ActionBar中设置下拉列表的样式?(android下拉框样式)
- Android 1.6中的ActionBar
- Android 3.0 Honeycomb:如何在Action Bar中启用/禁用菜单项?
- Android ActionBar(ActionBarCompat)Spinner下拉列表?
- Android UI ActionBar 功能 - 自定义 Action Bar 样式
android – 如何在Honeycomb的ActionBar中设置下拉列表的样式?(android下拉框样式)
// Configures the action bar private void configureActionBar() { mActionBar = getActionBar(); mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); SpinnerAdapter spinnerAdapter = ArrayAdapter.createFromresource(this,R.array.rooms,android.R.layout.simple_spinner_dropdown_item); ActionBar.OnNavigationListener navigationCallback = new ActionBar.OnNavigationListener() { public boolean onNavigationItemSelected(int itemPosition,long itemId) { String[] rooms = getResources().getStringArray(R.array.rooms); mAppState.setCurrentRoom(rooms[itemPosition]); return false; } }; mActionBar.setListNavigationCallbacks(spinnerAdapter,navigationCallback); }
下图显示了ActionBar的一部分的屏幕截图.我想设置下拉列表的样式,但我不知道该怎么做.这个link有一些XML样本,但我不知道如何应用它们以及如何设置下面指出的特定元素的样式.
以下是我想要做的更改列表:
>更改所选项目的字体大小以匹配单词“Room Manager”的字体大小
>删除显示的所选项目下方的灰线
>删除下拉列表顶部的蓝线
>将单选按钮添加到列表项,并检查下拉列表中当前选定的项
>更改分隔列表项的行的颜色
有没有人对如何做到这一点有任何想法?
谢谢!
解决方法
R.layout.spinner_dropdown_text_view:
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/spinnerDropdownTextView" android:layout_width="match_parent" android:layout_height="50dp" android:paddingLeft="10dp" android:gravity="center_vertical" android:textSize="18dp" />
R.layout.spinner_selector_text_view:
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/spinnerSelectorTextView" android:layout_width="210dp" android:layout_height="match_parent" android:paddingTop="12dp" android:textSize="18dp" android:textColor="@android:color/black" />
ArrayAdapter代码:
ArrayAdapter<CharSequence> aa = ArrayAdapter.createFromresource(this,R.layout.spinner_selector_text_view); aa.setDropDownViewResource(R.layout.spinner_dropdown_text_view);
结果:
不幸的是,我无法弄清楚如何添加单选按钮,或如何删除任何水平线.
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 3.0 Honeycomb:如何在Action Bar中启用/禁用菜单项?
<item android:id="@+id/men_1" android:title="@string/men_1" android:showAsAction="ifRoom|withText" android:icon="@drawable/ic_menu_1" android:enabled="false"/>
通过< 3.0应用程序上的代码更改它也很容易:
@Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); MenuItem item = menu.findItem(R.id.men_1); item.setEnabled(false); return true; }
但是如何在Android 3.x上执行此操作?
我想根据显示的片段禁用菜单选项.
亲切的问候,
海蜇
解决方法
@Override public void onPrepareOptionsMenu(Menu menu) { MenuItem item= menu.findItem(R.id.men_1); item.setEnabled(false); super.onPrepareOptionsMenu(menu); }
所以片段负责使菜单充气
编辑注意需要调用setHasOptionsMenu(true)
Android ActionBar(ActionBarCompat)Spinner下拉列表?
我正在使用像这样的微调器布局,
<Spinner android:id="@+id/SpinnerList" android:layout_width="fill_parent" android:layout_height="wrap_content" />
我的代码,
public class MainActivity extends ActionBaractivity implements OnItemSelectedListener{ private boolean mAlternateTitle = false; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ActionBar bar = getActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); Spinner spinner = (Spinner) findViewById(R.id.SpinnerList); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromresource(this,R.array.locations,android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); spinner.setonItemSelectedListener(this); } }
它在我的android galaxy ace中显示正常的微调器.我需要输出如下所示,
是那个位置android 2.3.请给出建议.
谢谢.
解决方法
在menu / main.xml中:
<item android:id="@+id/menu_spinner1" android:showAsAction="always" android:orderInCategory="1" android:actionView>
在活动中:
private MenuItem mSpinnerItem1 = null; @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. MenuInflater mi=getMenuInflater(); mi.inflate(R.menu.main,menu); mSpinnerItem1 = menu.findItem( R.id.menu_spinner1); View view1 = mSpinnerItem1.getActionView(); if (view1 instanceof Spinner) { final Spinner spinner = (Spinner) view1; spinner.setAdapter(ad1); spinner.setonItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0,View arg1,int arg2,long arg3) { // Todo Auto-generated method stub } @Override public void onnothingSelected(AdapterView<?> arg0) { // Todo Auto-generated method stub } }); } return true; }
Android UI ActionBar 功能 - 自定义 Action Bar 样式
ActionBar 的样式官方提供了三种:
Theme.Holo
Theme.Holo.Light
Theme.Holo.Light.DarkActionBar
但不仅仅是这三种,我们还可以自己定义 ActionBar 的样式:
官方帮助文档地址:http://wear.techbrood.com/training/basics/actionbar/styling.html
比如让 ActionBar 显示一个纯色的背景图片:
首先导入文件:
他是一个点 9PNG 类型的文件,可以使中间无限伸展而不变型,在 AndroidUI 布局动画 - 点九 PNG 技术 中有说明;
然后在 values / 下新建一个 themes.xml 文件,自定义 ActionBar 样式:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomActionBarTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
<item name="android:actionBarStyle">@style/MyActionBar</item>
</style>
<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
<item name="android:background">@drawable/actionbar_background</item>
</style>
</resources>
注:自定义的 ActionBar 必须继承自官方默认提供的三种主题中的一种;
然后在 AndroidManifest.xml 文件中将应用程序的主题更改为我们自定义的主题:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/CustomActionBarTheme" >
关于android – 如何在Honeycomb的ActionBar中设置下拉列表的样式?和android下拉框样式的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Android 1.6中的ActionBar、Android 3.0 Honeycomb:如何在Action Bar中启用/禁用菜单项?、Android ActionBar(ActionBarCompat)Spinner下拉列表?、Android UI ActionBar 功能 - 自定义 Action Bar 样式等相关内容,可以在本站寻找。
本文标签: