Android上的中心应用栏标题

时间:2016-12-13 22:09:01

标签: java android android-studio

我正在尝试使用中心对齐标题创建自己的自定义应用栏。 Android Studio的编辑器显示我的标题已正确居中,但它不在我的实际设备上。

MainActivity.java

public class MainActivity extends AppCompatActivity {

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

    Toolbar myToolbar = (Toolbar) findViewById(R.id.encounter_toolbar);
    setSupportActionBar(myToolbar);

    getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    getSupportActionBar().setCustomView(R.layout.encounter_menu_bar_layout);
}

encounter_menu_bar_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize">

<TextView
    android:id="@+id/encounter_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/untitled"
    android:textSize="20sp"
    android:textColor="@color/titleTextColor"
    android:textStyle="bold"
    android:layout_gravity="center" />

</LinearLayout>

encounter_menu_bar.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">

</menu>

Here's what shows up on my device

修改

很多人建议我将android:layout_gravity更改为android:gravity。我也试过了,我仍然没有让它正确排队。

我正在启用应用栏以显示特定片段,如下所示:

EncounterFragment.java

public class EncounterFragment extends Fragment {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    setHasOptionsMenu(true);

    return inflater.inflate(R.layout.fragment_encounter, container, false);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) {
    menuInflater.inflate(R.menu.encounter_menu_bar, menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO: This
    return super.onOptionsItemSelected(item);
}
}

我也忘了提到我将菜单附加在一个片段中。这是它的布局:

fragment_encounter.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.Toolbar
    android:id="@+id/encounter_toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:elevation="4dp"
    android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
</LinearLayout>

5 个答案:

答案 0 :(得分:1)

尝试添加android:gravity="center"。 发生这种情况是因为您必须将整个文本居中,而不仅仅是布局

答案 1 :(得分:1)

使用android:layout_gravity="center"

示例:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

注意:layout_gravity gravity

在你的情况下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize">

<TextView
    android:id="@+id/encounter_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="@string/untitled"
    android:textSize="20sp"
    android:textColor="@color/titleTextColor"
    android:textStyle="bold"
    android:layout_gravity="center" />

</LinearLayout>

答案 2 :(得分:0)

将textview更改为此

使其与宽度相匹配,并使重心居中文本

Globals.ThisAddIn.CustomTaskPanes

答案 3 :(得分:0)

您想要将xml视图更改为:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
#this should be horizontal, not vertical.
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize">

<TextView
    android:id="@+id/encounter_name"
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center"
    android:text="@string/untitled"
    android:textSize="20sp"
    android:textColor="@color/titleTextColor"
    android:textStyle="bold"
/>

首先,您需要使线性布局水平,而不是垂直。通过使其垂直,您将它对齐到左侧。

然后,您需要确保您的textview宽度和高度与父级匹配,而不是仅仅包装内容。然后,您可以使用gravity属性确保文本居中。当你以前使用过引力时,textview只是简单地包裹了内容,因此它并没有在文本视图中居中。通过匹配父视图边界,您可以根据需要将文本居中。

答案 4 :(得分:0)

这就是您的工具栏XML应该是

的方式
<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:minHeight="?attr/actionBarSize"  
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:titleTextColor="@android:color/white"
    android:background="?attr/colorPrimary">

     <TextView
        android:id="@+id/toolbar_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Toolbar Title"
        android:textColor="@android:color/white"
        style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
        android:layout_gravity="center"
     />

</android.support.v7.widget.Toolbar>

然后在你的活动中

 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
 setSupportActionBar(toolbar);
 getSupportActionBar().setDisplayShowTitleEnabled(false); 
 TextView mTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);