我根据工具栏创建了自定义视图:
public class CommonToolbar extends Toolbar {
public CommonToolbar(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.common_toolbar, this, true);
}
common_toolbar.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="32dp"
android:background="@color/colorPrimary"
app:contentInsetStart="0dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/backIcon"
style="@style/ToolbarNavigationButton"
app:srcCompat="@drawable/icon_close" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:layout_toEndOf="@+id/backIcon"
android:gravity="center"
android:text="Title"
android:textStyle="bold" />
</RelativeLayout>
</android.support.v7.widget.Toolbar>
正如您所看到的,我将属性 contentInsetStart 值设置为0,但是当我在任何布局文件中使用此工具栏时,仍然存在填充(image)。我可以通过更改目标布局文件中的 contentInsetStart 值来修改它,但我更喜欢将其保留在源xml中。为什么会这样?
答案 0 :(得分:0)
由于您的自定义视图扩展了工具栏,因此您将xml工具栏扩展为工具栏。如果使用布局检查器查看布局,则视图层次结构将如下所示:
<CommonToolbar> (Subclass of Toolbar)
<Toolbar>
<RelativeLayout>
...
因此,当您通过xml设置contentInsetStart时,您将在内部工具栏上进行设置。外部工具栏仍有内容插入。
为避免这种情况,您可以让Common Toolbar扩展ViewGroup,即
public class CommonToolbar extends RelativeLayout {
public CommonToolbar(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.common_toolbar, this, true);
}
或使用include标记对常用工具栏进行充气。即。
<include
layout="@layout/common_toolbar"
/>
允许您删除CommonToolbar自定义视图
答案 1 :(得分:0)
使用setContentInsetsAbsolute(0,0);
public class CustomToolbar extends Toolbar {
@BindView(R.id.txt_screen_title)
TextView txtScreenTitle;
public CustomToolbar(Context context) {
super(context);
initToolbarLayout(context);
}
public CustomToolbar(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initToolbarLayout(context);
}
public CustomToolbar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initToolbarLayout(context);
}
private void initToolbarLayout(Context context) {
View toolbarView = LayoutInflater.from(context).inflate(R.layout.app_toolbar, null);
this.addView(toolbarView);
ButterKnife.bind(this, toolbarView);
setContentInsetsAbsolute(0, 0);
}
public void setScreenTitle(String title) {
if(txtScreenTitle != null) {
txtScreenTitle.setText(title);
}
}
}