【问题标题】:How to align Title in center of Actionbar with back button in fragment如何将动作栏中心的标题与片段中的后退按钮对齐
【发布时间】:2017-03-19 04:24:33
【问题描述】:

我正在尝试在中心制作一个动作栏的标题栏, 我尝试了代码使其居中但没有成功 我的代码在片段((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); ((AppCompatActivity)getActivity()).getSupportActionBar().setCustomView(R.layout.toobar_center_withback); ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);

我的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:orientation="vertical">

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:gravity="center"
        android:text="SIGN IN"
        android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
        android:textStyle="bold" />

</LinearLayout>

它给出输出 我也尝试了一些对 textview 的边距,但我怎么知道不同屏幕的实际边距测量

我遵循了这些解决方案,但没有成功

How to align title at center of ActionBar in default theme(Theme.Holo.Light)

另一件事是我不想使用任何工具栏或其他东西,我想要一个适用于所有片段的简单解决方案

我也写了代码但没有成功

 public void setTitle(String title) {
    ((AppCompatActivity) getActivity()).getSupportActionBar().setHomeButtonEnabled(true);
    ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    TextView textView = new TextView(getActivity());
    textView.setText(title);
    textView.setTextSize(20);
    textView.setTypeface(null, Typeface.BOLD);
    textView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
    textView.setGravity(Gravity.CENTER);
    textView.setTextColor(getResources().getColor(R.color.black));
    ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    ((AppCompatActivity) getActivity()).getSupportActionBar().setCustomView(textView);
}

当我没有按钮或有后退按钮并且菜单中还有一个带有 showaction 的按钮时,它工作正常

【问题讨论】:

  • 我认为,您的文本视图在后退按钮后膨胀。这就是为什么它在默认向上按钮之后计算您的工具栏的原因。所以,基本上你使用重力右和它的工作..但它的父布局在向上按钮之后开始......这就是为什么......当你在工具栏中添加按钮时,它会将文本向左移动(根据到按钮宽度)。
  • 实际上我正在使用片段,并且我还更改了后退按钮的默认行为,因此我正在调用 ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);沉降后
  • 不管你是否使用片段。它不相关。它只是关于视图和它的边界。这不是问题.. up 按钮只是占用它的空间.. 其余的是你的文本视图标题。
  • 解决办法是什么
  • 它没有像解决方案那样的解决方案。它可以通过技巧来完成。只需将 padding_right/margin_right 添加到您的文本视图(padding==向上按钮大小)。

标签: android android-layout android-studio android-fragments


【解决方案1】:

所以最后我找到了解决这个问题的技巧,并且成功了

setTitle("Sign In");
 ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        setHasOptionsMenu(true);

这是我的 setTitle 方法

 public void setTitle(String title) {
    ((AppCompatActivity) getActivity()).getSupportActionBar().setHomeButtonEnabled(true);
    ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    TextView textView = new TextView(getActivity());
    textView.setText(title);
    textView.setTextSize(20);
    textView.setTypeface(null, Typeface.BOLD);
    textView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
    textView.setGravity(Gravity.CENTER);


    textView.setTextColor(getResources().getColor(R.color.black));
    ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    ((AppCompatActivity) getActivity()).getSupportActionBar().setCustomView(textView);
}

在这里我创建了一个带有透明图像的菜单项

 @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.blank_menu,menu);
        super.onCreateOptionsMenu(menu, inflater);
    }

这是我的blank_menu.xml

    <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    >
<item
    android:title="   "
    app:showAsAction="always|withText"
    android:icon="@drawable/transparent"
    >
</item>
</menu>

现在它的输出是这样的

【讨论】:

    【解决方案2】:

    我也遇到了这个问题,然后我找到了解决方案:

    1.创建自定义工具栏custom_actionbar.xml

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorWhite"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        app:popupTheme="@style/AppTheme.PopupOverlay"/>
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="?attr/actionBarSize"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true"
            android:src="@drawable/logo_action_bar" />
    </RelativeLayout>
    

    2.使用禁用默认操作栏

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    

    3.然后在每个布局中包含这个custom_actionbar

    <include layout="@layout/custom_actionbar"/>
    

    【讨论】:

    • 你没看错我的问题吗,我其实说我不想使用任何工具栏
    • @UmarAta 但你不能不使用工具栏
    • 我的回答非常相关,可以解决您的问题
    • 我在我的问题中明确提到我不想使用任何工具栏,因为我的项目正在运行并且我无法更改所有活动和片段行为,即使我也是除了中心对齐问题,我无法更改整个项目的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 2022-11-19
    • 1970-01-01
    • 2013-01-10
    • 2017-10-03
    • 2015-05-22
    • 1970-01-01
    相关资源
    最近更新 更多