如何在活动中将标题或标签居中对齐?

7

我知道设置activity标题有两种方式。一种是在Android清单文件中设置,像这样android:label="@string/app_name"。第二种是在activity类中以编程方式设置,如setTitle("Hello World!")。这两种方式都位于左侧,但我该如何将它们放置在中心位置呢?

4个回答

21

它会正常工作。

TextView customView = (TextView) 
LayoutInflater.from(this).inflate(R.layout.actionbar_custom_title_view_centered, 
     null); 

ActionBar.LayoutParams params = new ActionBar.LayoutParams(
     ActionBar.LayoutParams.MATCH_PARENT, 
     ActionBar.LayoutParams.MATCH_PARENT, Gravity.CENTER ); 

customView.setText("Some centered text"); 
getSupportActionBar().setCustomView(customView, params); 

@Chloe 如果你使用ActionBarSherlock(这是你应该做的),你可以使用com.actionbarsherlock.app.ActionBar.LayoutParams来支持API级别低于11。 - Christian Brüggemann
我正在使用minSdk 14,但这对我没有用。请查看我的问题:http://stackoverflow.com/questions/17605282/center-title-of-activity-in-android-action-bar - Cote Mounyo
@Chaitu 如何解决后退导航? - Mitesh Shah
除非我知道你使用的主题,否则我无法告诉你原因。暂时可以通过取出ToolBar并将标题TextView居中对齐来检查吗? - Chaitu

5
我找到了另一种使标题居中的方法,只需要将代码放在setContentView(R.layout.new)之下即可...
((TextView)((FrameLayout)((LinearLayout)((ViewGroup) getWindow().getDecorView()).getChildAt(0)).getChildAt(0)).getChildAt(0)).setGravity(Gravity.CENTER);

希望这能对您有所帮助。谢谢!

15
这种方法唯一的问题在于依赖于窗口内容结构的未记录方面。众所周知,谷歌会彻底改变未记录的数据结构,因此不能保证这种特定技术在未来仍可行。 - Ted Hopp
3
好的,谷歌在操作系统设计方面不太行,对我来说也没什么用。但这个代码可以用:((TextView)((LinearLayout)((ViewGroup) getWindow().getDecorView()).getChildAt(0)).getChildAt(0)).setGravity(Gravity.CENTER); - HardCoder
2
@TedHopp 谷歌已经以彻底改变记录在案的数据结构而闻名...无视向后兼容性,每次我决定升级任何Android SDK或开发工具时都让我的生活变得痛苦。我会说:做能用的现在的事情。它总会出问题,你总得修复它。不管它是否有文档记录。 - ateiob
-1 这是一种依赖于布局结构始终保持不变的黑客技巧,但令人惊讶的是,它已经失效了。 - weston
当我使用上述答案中的代码时,我会收到一个错误 - Caused by: java.lang.ClassCastException: com.android.internal.widget.ActionBarView cannot be cast to android.widget.TextView - VikramV

5
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); // must come before setContentView
   setContentView(R.layout.activity_calculator); 
   getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);

将你的布局放在layout/title_bar.xml中。
<?xml version="1.0" encoding="utf-8"?>
<TextView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/myTitle"
  android:text="Custom Centered Title"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:textColor="@android:color/black"
  android:gravity="center"
   />

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/2.2_r1.1/com/example/android/apis/app/CustomTitle.java


我正在使用minSdk 14,但这对我没有用。请查看我的问题:http://stackoverflow.com/questions/17605282/center-title-of-activity-in-android-action-bar - Cote Mounyo

5

您需要定义一个自定义的标题样式/主题。在示例中查找com.example.android.apis.app.CustomTitle。


AndroidRuntimeException:您不能将自定义标题与其他标题功能组合使用。 - ateiob
@ateiob - 是的,这个想法是如果你想在自定义标题中使用“其他标题功能”,你就必须自己将这些功能构建到自定义标题中。除非Android也控制标题本身,否则它无法知道如何组合股票功能。 - Ted Hopp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接