Android自定义标题栏,如何使标题栏文字居中显示,gravity无效

李狗蛋52635 2012-03-21 09:45:48
各位好
  小弟在自定义标题栏时遇到了问题,如下代码,我需要替换标题栏的背景,所以自己重新定义了一个theme,但是无论用gravity或者是layout_gravity都无法将标题栏中文字居中,求教如何解决这个问题?

代码如下:

<resources>
<style name="ThemeForCustomTitle" parent="android:Theme">
<item name="android:windowTitleStyle">@style/CustomWindowTitle</item>
<item name="android:windowTitleBackgroundStyle">@style/StatusBarBackground</item>
<item name="android:windowContentOverlay">@null</item>
</style>

<style name="CustomWindowTitle">
<item name="android:shadowColor">#BB000000</item>
<item name="android:shadowRadius">0</item>
<item name="android:gravity">center</item>     <-无效
<item name="android:layout_gravity">center</item>     <-无效
</style>

<style name="StatusBarBackground">
<item name="android:background">@drawable/progress</item>
</style>
</resources>

先谢了
...全文
9849 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
雨落嫣然 2014-07-25
  • 打赏
  • 举报
回复
不行啊,android:Theme输入进去提示错误
zgf1991 2012-11-02
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- 假如是LinearLayou 就得在上面加 android:gravity="center_vertical" -->
<!-- android:layout_gravity="center_vertical" -->
<!-- android:layout_marginLeft="3dp" -->

<TextView
android:id="@+id/titlebar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="2dp"
android:text="标题栏" />
<!-- android:gravity="center_vertical" -->
<!-- android:layout_gravity="center_vertical" -->

</RelativeLayout>

在加上lz 写在activity中的代码
vviking 2012-08-21
  • 打赏
  • 举报
回复
楼主,你好。
我也遇到你这样的问题。使用和你一样的方法,通过自己定义的layout文件是可以将title居中的。
但是,这个作用域只是在activity里。我想把整个application里设置这样的属性,也就是说,要在这个应用里所有界面的title都是居中的!

<application android:name="AppName" android:label="@string/appName"
android:icon="@mipmap/ic_launcher_settings"
android:taskAffinity=""
android:theme="@style/perference_set_activity" android:uiOptions="splitActionBarWhenNarrow"
android:hardwareAccelerated="true">
<!-- Settings -->

<activity android:name="ActivityName"
android:label="@string/activityName"
android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

我把theme加在application的属性中,这样修改的背景、字体之类的属性就实现在每个activity中了,但唯独不能居中。搞了一天没找到原因。如果lz有源码可以去看一下settings下的代码,有空帮忙分析一下!谢谢!
李狗蛋52635 2012-07-31
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

你文字居中解决了嘛????
[/Quote]

解决了啊,如8楼所写,在R.layout.title_bar中,让文字居中就好了啊。


[Quote=引用 10 楼 的回复:]

你的那个出现了2个标题,怎么解决的?
这样肯定是解决不了的
[/Quote]

可以解决的啊,请自己动手试下。
daijwhoch 2012-07-20
  • 打赏
  • 举报
回复
你的那个出现了2个标题,怎么解决的?
这样肯定是解决不了的
hit93008 2012-05-05
  • 打赏
  • 举报
回复
你文字居中解决了嘛????
longLiveChina2014 2012-03-21
  • 打赏
  • 举报
回复
requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //Hide all screen decorations

用这两行设置全屏 然后在xml里做效果!
这样 在xml里设置的布局的background就是全屏的 你只要在上面个搞个小点的 textview就可以模拟出了
李狗蛋52635 2012-03-21
  • 打赏
  • 举报
回复
自己顶下,大虾们快出现吧~
李狗蛋52635 2012-03-21
  • 打赏
  • 举报
回复
这种方法我有用过,之所以选择当前这种,就是因为要替换标题栏的background,用你的方法background会有空白。
还是谢谢你啊
hswujingjing 2012-03-21
  • 打赏
  • 举报
回复
requestWindowFeature ( Window.FEATURE_NO_TITLE );
先把自带的标题栏去掉

然后在XML直接布局在上面做个效果就好了。。。
李狗蛋52635 2012-03-21
  • 打赏
  • 举报
回复
问题解决了,将网上流行的两种方法结合即可。


<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="ThemeForCustomTitle" parent="android:Theme">
<item name="android:windowTitleStyle">@null</item>
<item name="android:windowTitleBackgroundStyle">@style/StatusBarBackground</item>
<item name="android:windowContentOverlay">@null</item>
</style>

<style name="StatusBarBackground">
<item name="android:background">@drawable/progress</item>
</style>
</resources>


为activity设置theme="ThemeForCustomTitle"并且在activity里:

super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);
TextView titleText = (TextView) findViewById(R.id.titleText);
titleText.setText(R.string.listenPA);


此外,我在网上做了一些调查,在保留title bar的前提下,单纯用theme或者是单纯设置layout替换背景,都不能达到完善的效果,老外也发现了这个问题,sdk1.5~2.1都有这个问题。
李狗蛋52635 2012-03-21
  • 打赏
  • 举报
回复
这种方法有点间接了呢,我就想问下,这里要设置个啥属性能让文字居中呢。。
李狗蛋52635 2012-03-21
  • 打赏
  • 举报
回复
谢谢楼上的哥们,我来试下。

80,493

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧