【问题标题】:ActionBar DropDown padding causes blank space [landscape mode]ActionBar DropDown padding 导致空白[横向模式]
【发布时间】:2015-06-12 20:24:28
【问题描述】:

目前我有以下 style.xml

更新 - 包括所有相关样式

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="actionBarStyle">@style/MyActionBarStyle</item>
    <item name="actionDropDownStyle">@style/MyDropDownStyle</item>
</style>
<style name="MyActionBarStyle" parent="Widget.AppCompat.ActionBar.Solid">
    <item name="android:actionBarDivider">@null</item>
    <item name="background">@drawable/logo</item>
    <item name="displayOptions">showHome</item>
</style>
<style name="MyDropDownStyle" parent="Base.Widget.AppCompat.Spinner.DropDown.ActionBar">
    <item name="android:paddingLeft">240dp</item>
    <item name="android:dropDownHorizontalOffset">240dp</item>
    <item name="android:background">@android:color/transparent</item>
</style>

这使我可以将 DropDown 240dp 设置为远离其 X 轴,效果非常好。请参阅屏幕截图 #1

截图 #1

但作为副作用,这种填充会在弹出窗口本身的右侧产生一个空白“空格”。见截图#2

截图 #2

如何设置 Popup 的固定大小或忽略 DropDown 样式设置的填充?

更新

paddingLeft 的原因是不与 logo 重叠(定义为背景)

<item name="background">@drawable/logo</item>

更新 2 - 没有 dropDownHorizo​​ntalOffset 样式的屏幕截图

PS:

dropDownHorizontalOffset仅用于设置Popup匹配的X轴匹配paddingLeft

【问题讨论】:

  • 虽然我不明白你为什么想要这样的填充,菜单弹出不应该是这样的。发布更多与之相关的代码,以便我们提供帮助(样式等)。如果您删除 android:dropDownHorizontalOffset 会怎样?
  • 嗯,我已经注意到android开发是-ne无障碍开发。我很确定我只需要知道如何设置弹出样式(如宽度)来解决问题 - 有什么建议吗?
  • 对不起,我不知道您是如何在左侧弹出菜单的... 使用 AppCompat?工具栏?任何基本主题?
  • 当tabs imo的空间较小时,此弹出窗口是AppCompat主题的默认行为 - 我还没有添加任何其他布局
  • AppCompat 是否不推荐使用下拉选择器/选项卡?我相信是的。我知道没有解决方法,抱歉。

标签: android android-layout android-styles


【解决方案1】:

一种可能的解决方法是用新工具栏 (android.support.v7.widget.Toolbar) 替换 ActionBar,并在其中添加一个 Spinner (DropDown)

为了更好的说明,代码行已更改,未经测试

ma​​in_activity.xml

<LinearLayout
    android:orientation="vertical"
    android:background="@color/navigationBar"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">

        <android.support.v7.widget.Toolbar
            android:background="@drawable/logo"
            android:id="@+id/toolbar"
            android:layout_height="wrap_content"
            android:layout_width="match_parent">
            <Spinner
                android:layout_marginLeft="240dp"
                android:id="@+id/spinner"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </android.support.v7.widget.Toolbar>
</LinearLayout>

MainActivity.java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    //toolbar.setLogo(R.drawable.logo);

    setupSpinnerTabs();

    // for device orientation purpose
    displaySpinner(getResources().getConfiguration().orientation);
}

private void setupSpinnerTabs() {
    ToolbarSpinnerAdapter adapter = new ToolbarSpinnerAdapter(toolbar.getContext());

    spinner = (Spinner)findViewById(R.id.spinner);
    spinner.setAdapter(adapter);
    // the below is used for the selection "change event" of the spinner
    //spinner.setOnItemSelectedListener(new SpinnerSelection());
}

ToolbarSpinnerAdapter.java

public class ToolbarSpinnerAdapter extends BaseAdapter implements SpinnerAdapter {
    Context context;

    ToolbarSpinnerAdapter(Context ctx) {
        context = ctx;
    }

    @Override
    public int getCount() {
        return 1;
    }

    @Override
    public Object getItem(int position) {
        return "Spinner here"
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View defaultView = getLayoutInflater().inflate(R.layout.your_spinner_dropdown_layout, null);
        // [...]

        text.setText( this.getItem(position).toString() );
        return defaultView;
    }
}

结果应该与下图非常相似:

PS:在纵向模式下,微调器可能没有足够的空间

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多