GVKun编程网logo

android – 如何在Honeycomb的ActionBar中设置下拉列表的样式?(android下拉框样式)

16

最近很多小伙伴都在问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 – 如何在Honeycomb的ActionBar中设置下拉列表的样式?(android下拉框样式)

我正在使用ActionBar开发 Android Honeycomb.我通过以下方式设置了ActionBar:

// 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”的字体大小
>删除显示的所选项目下方的灰线
>删除下拉列表顶部的蓝线
>将单选按钮添加到列表项,并检查下拉列表中当前选定的项
>更改分隔列表项的行的颜色

有没有人对如何做到这一点有任何想法?

谢谢!

解决方法

我发现了如何设置列表中的项目以及显示的项目的样式.解决方案涉及在/ res / layout目录中创建两个布局xml文件 – 一个用于微调器下拉项,另一个用于选择器(显示的项).然后我就可以将视图资源添加到ArrayAdapter.

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

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中启用/禁用菜单项?

Android 3.0 Honeycomb:如何在Action Bar中启用/禁用菜单项?

在 XML中禁用菜单项很容易:
<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下拉列表?

Android ActionBar(ActionBarCompat)Spinner下拉列表?

我目前正在为ActionBar(ActionBarCompat)工作,我需要一些关于actionbar的澄清.

我正在使用像这样的微调器布局,

<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 样式

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 样式等相关内容,可以在本站寻找。

本文标签: