Android settings 返回按钮缩进跟踪

这篇博客记录了一位工程师在Android应用中遇到的返回按钮位置过于靠边的问题。通过代码审查和资源查找,定位到问题在于Toolbar的style。最终,通过修改代码直接解决了这个问题,而不是通过调整style,因为担心潜在的影响。虽然尝试过在style中修改,但效果不理想。博客还提到了正确修改Toolbar样式的App层面方法,并提供了相关链接作为参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

研发部同事反馈一个问题,那就是设置菜单的返回按钮太靠边了不好点。

打开monitor 找到该按钮。无id。 desc显示 向上导航。 Settings grep无果。
进入framework base packages搜索找到<string name="action_bar_up_description" msgid="2237496562952152589">"向上导航"</string>
继续grep -r action_bar_up_description
从结果中找到  
core/java/com/android/internal/widget/ActionBarView.java
packages/SettingsLib/res/layout/settings_with_drawer.xml
packages/SystemUI/res/layout/qs_customize_panel_content.xml
grep -r settings_with_drawer
找到
packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java:
gedit ./packages/SettingsLib/res/layout/settings_with_drawer.xml
找到
<Toolbar
        android:id="@+id/action_bar"
        style="?android:attr/actionBarStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="?android:attr/actionBarTheme"
        android:navigationContentDescription="@*android:string/action_bar_up_description" />
通过monitor实际对比 发现确实是这里。那么跟踪它的style 。
grep一下 actionBarStyle。出来的结果中,由于我知道默认风格直接是
core/res/res/values/themes_material.xml:        <item name="actionBarStyle">@style/Widget.Material.Light.ActionBar.Solid</item>
grep Widget.Material.Light.ActionBar.Solid 跟到这个
core/res/res/values/styles_material.xml:    <style name="Widget.Material.Light.ActionBar.Solid" parent="Widget.Material.ActionBar.Solid" />
gedit进去一看 只有一行    <style name="Widget.Material.Light.ActionBar.Solid" parent="Widget.Material.ActionBar.Solid" />
跟他父亲
  <style name="Widget.Material.ActionBar.Solid">
        <item name="background">?attr/colorPrimary</item>
        <item name="backgroundStacked">?attr/colorPrimary</item>
        <item name="backgroundSplit">?attr/colorPrimary</item>
    </style>
没有关于缩进的东西
继续跟它父亲
    <style name="Widget.Material.ActionBar">
        <item name="background">@null</item>
        <item name="backgroundStacked">@null</item>
        <item name="backgroundSplit">@null</item>
        <item name="displayOptions">showTitle</item>
        <item name="divider">?attr/dividerVertical</item>
        <item name="height">?attr/actionBarSize</item>
        <item name="paddingStart">0dip</item>
        <item name="paddingTop">0dip</item>
        <item name="paddingEnd">0dip</item>
        <item name="paddingBottom">0dip</item>
        <item name="titleTextStyle">@style/TextAppearance.Material.Widget.ActionBar.Title</item>
        <item name="subtitleTextStyle">@style/TextAppearance.Material.Widget.ActionBar.Subtitle</item>
        <item name="progressBarStyle">?attr/progressBarStyleHorizontal</item>
        <item name="indeterminateProgressStyle">?attr/progressBarStyle</item>
        <item name="progressBarPadding">32dp</item>
        <item name="itemPadding">8dp</item>
        <item name="homeLayout">@layout/action_bar_home_material</item>
        <item name="gravity">center_vertical</item>
        <item name="contentInsetStart">@dimen/action_bar_content_inset_material</item>
        <item name="contentInsetStartWithNavigation">@dimen/action_bar_content_inset_with_nav</item>
        <item name="contentInsetEnd">@dimen/action_bar_content_inset_material</item>
        <item name="elevation">@dimen/action_bar_elevation_material</item>
        <item name="popupTheme">?attr/actionBarPopupTheme</item>
    </style>
 
  <item name="paddingStart">0dip</item>就是我要改的东西。由于害怕范围攻击 所以回头找Toolbar类
root@u64-MS-7C67:/media/work/s905d3/frameworks/base/packages/SettingsLib# grep -r Toolbar
res/layout/settings_with_drawer.xml:    <Toolbar
src/com/android/settingslib/drawer/SettingsDrawerActivity.java:import android.widget.Toolbar;
src/com/android/settingslib/drawer/SettingsDrawerActivity.java:        Toolbar toolbar = findViewById(R.id.action_bar);
打开/frameworks/base/core/java/android/widget/Toolbar.java
看到这个 mNavButtonStyle = a.getResourceId(R.styleable.Toolbar_navigationButtonStyle, 0);果断认为是这个
搜索这个 最后看到ensureNavButtonView
直接加一行       lp.setMarginStart(100);//太多了orz。。其实我只想看效果。
编译固件 ,真实有效。按说到这里也就差不多了。但是改代码其实范围攻击更加大。我们须要定位到style。于是继续摸索。
上网搜索到app层面正经改toolbar的方式https://blog.csdn.net/weixin_34007291/article/details/86441739 https://www.jianshu.com/p/43edb239e745?t=123
那么直接style_meterial中搜索Toolbar.Button.Navigation
找到    <style name="Widget.Material.Toolbar.Button.Navigation" parent="Widget.Material">
照猫画葫芦添加一个
 <item name="paddingStart">20dp</item>完事.但是效果不理想,backgroud和图标位置不一。我又没时间调。所以最后还是代码改完事。而且实测不会影响到正常app的行为。

收工。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值