android.R.id.home 抛出空指针异常

Posted

技术标签:

【中文标题】android.R.id.home 抛出空指针异常【英文标题】:android.R.id.home throws null pointer exception 【发布时间】:2020-08-10 23:49:04 【问题描述】:

我使用 setDisplayHomeAsUpEnabled(true) 来显示主页图标。这工作正常,但它需要很多余量,我试图通过使用下面的代码来重置 -

ImageView view = findViewById(android.R.id.home);
view.setPadding(7,0,0,0);

但它返回空指针异常。

启用主页图标的代码 -

final LayoutInflater actionBarInflater = (LayoutInflater) 
    this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View viewActionBar = actionBarInflater.inflate(R.layout.action_bar, null);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);

Image shows the home up icon and my app icon, i want to reduce the space between theme

感谢任何帮助。谢谢!

【问题讨论】:

***.com/questions/9685658/… @hafiza 我不确定我是否遗漏了什么,但两者看起来无关。 该 ID 不是 View ID,这就是 findViewById() 找不到它的原因。如果设置得当,该特定按钮可以充当 MenuItem 的 ID。在代码中获取对该按钮的引用可能不值得麻烦。您应该能够使用 XML 属性调整该差距。我相信那会是contentInsetStartWithNavigation,就像this answer 中提到的那样。 感谢 Mike,它提供了帮助,但与 WhatsApp 不同,仍有一些空间。我认为 WhatsApp 所做的是使用一些自定义工具栏,这解释了为什么即使您单击向上图标旁边的图像,它也会带您返回而不是显示朋友的个人资料,并且您实际上需要单击朋友/群组名称才能查看详细信息。感谢您的快速帮助。 嗯,唯一的其他间距将来自该按钮的宽度,因为它比图标宽。如果您想尝试一下,可以使用my answer here 作为指导。它显示了如何设置该按钮的样式。在这种情况下,您需要一个 <item name="android:minWidth">??dp</item> 而不是那里的 tint。我相信,默认值是56dp,所以你绝对可以让它更薄。不过,正如您所指出的,完全自定义的 Toolbar 可能更容易根据需要进行操作。 【参考方案1】:

要访问主页按钮,请参阅my answer。但它不会帮助您从中删除多余的填充和边距。为此,您应该在工具栏布局 xml 中重置它:

     <com.google.android.material.appbar.MaterialToolbar
            android:id="@+id/toolbar"
            android:layout_
            android:layout_
            android:contentInsetLeft="0dp"
            android:contentInsetStart="0dp"
            app:contentInsetLeft="0dp"
            app:contentInsetStart="0dp"
            android:contentInsetRight="0dp"
            android:contentInsetEnd="0dp"
            app:contentInsetRight="0dp"
            app:contentInsetEnd="0dp"
            app:contentInsetStartWithNavigation="0dp"
            android:padding="0px"
            android:clipToPadding="false">

【讨论】:

以上是关于android.R.id.home 抛出空指针异常的主要内容,如果未能解决你的问题,请参考以下文章

Android Canvas drawcolor 抛出空指针异常

HashCode 抛出空指针异常

为啥非空列表会抛出空指针异常?

JSONObject 创建抛出空指针异常

Play 2.4 Finder 抛出空指针异常

SAX XML 解析器抛出空指针异常