【问题标题】:Alignment in custom Action bar自定义操作栏中的对齐方式
【发布时间】:2016-07-19 16:23:45
【问题描述】:

我已经创建了一个自定义操作栏

ActionBar actionBar = getActivity().getActionBar();
    actionBar.setCustomView(R.layout.action_bar_draft);
    actionBar.setDisplayShowCustomEnabled(true);
    actionbarFeed = (TextView) actionBar.getCustomView().findViewById(R.id.textView_blogtest);  
    actionbarFeed.setText("My Photos and videos");

问题是文本视图没有居中对齐

在我的布局中,文本视图位于中心。当涉及到操作栏时,它会移到右侧。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
    android:id="@+id/relativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true" >

    <TextView
        android:id="@+id/textView_blogtest"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="#000" />
</RelativeLayout>

 <style name="AppTheme.ActionBarStyle" parent="@style/Widget.Sherlock.ActionBar.Solid">
    <item name="android:icon">@drawable/menu</item>
    <item name="android:background">#ffca36</item>
    <item name="background">#f66605</item>
    <item name="android:customNavigationLayout">@layout/action_bar</item>
</style>

【问题讨论】:

标签: android android-actionbar


【解决方案1】:

请使用下面的函数来设置操作栏

public void setMainScreenActionBar(String p_title)
{

        LayoutInflater m_inflator = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        ActionBar m_actionBar = getSupportActionBar();
        View m_viewActionBar = m_inflator.inflate(R.layout.custom_actionbar_title_layout, null);
        ActionBar.LayoutParams m_params = new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.MATCH_PARENT, Gravity.CENTER);
        TextView m_tvTitle = (TextView) m_viewActionBar.findViewById(R.id.title);
        m_tvTitle.setText(p_title);
        m_actionBar.setCustomView(m_viewActionBar, m_params);
        m_actionBar.setDisplayShowCustomEnabled(true);
        m_actionBar.setDisplayShowTitleEnabled(false);
        m_actionBar.setDisplayHomeAsUpEnabled(true);
        m_actionBar.setHomeButtonEnabled(true);
}

custom_actionbar_title_layout.xml

<?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="wrap_content"
    android:layout_gravity="center"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:paddingTop="10dp"
        android:textColor="@android:color/black"
        android:textSize="18sp"
        android:textStyle="bold" />

</LinearLayout>

在您的 style.xml 中编写以下代码

<resources>

    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="actionBarStyle">@style/MyActionBar</item>
        <item name="android:actionBarStyle">@style/MyActionBar</item>
        <!-- Customize your theme here. -->
    </style>


     <style name="MyCustomTheme" parent="@style/Theme.AppCompat.Light">
        <item name="actionBarStyle">@style/MyActionBar</item>
        <item name="android:actionBarStyle">@style/MyActionBar</item>
    </style>
    <!-- ActionBar styles -->
    <style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
        <item name="android:background">@color/orange</item>
        <item name="background">@color/orange</item>
         <item name="android:homeAsUpIndicator">@drawable/ic_backarrow</item>
        <item name="homeAsUpIndicator">@drawable/ic_backarrow</item>
    </style>

</resources>

【讨论】:

  • 它会隐藏我的导航抽屉图标。
【解决方案2】:

在您的onCreate() 方法中:

    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
LayoutInflater mInflater = LayoutInflater.from(context);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setCustomView(mInflater.inflate(R.layout.custom_layout, null),
    new ActionBar.LayoutParams(
        ActionBar.LayoutParams.WRAP_CONTENT,
        ActionBar.LayoutParams.MATCH_PARENT,
        Gravity.CENTER
));

custom_layout:

<?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="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Your title"
        android:textColor="#ffffff"
        android:id="@+id/mytext"
        android:textSize="14dp" />

</LinearLayout>

然后你会得到一个只有标题的Actionbar

【讨论】:

  • 这将隐藏左侧的导航抽屉图标
  • 动作蝙蝠发生的变化是由于菜单图标。我的风格有问题吗?
  • 为什么要使用多个亲戚..最好使用线性并赋予重力
【解决方案3】:

在这里寻找答案:How to center align the ActionBar title in Android?

基本上,您应该更改操作栏的 xml 文件。

编辑:

为操作栏发布您的 xml 文件以获得更准确的答案...

EDIT2:
我不知道。但调试提示:将textview 的背景颜色设置为另一种颜色并张贴截图。由此可以看出问题是textview的内容放错了,还是整个textview放错了。

也许你只需要这条线

android:gravity="center"

在你的TextView?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多