RecyclerView 的列表项中的布局对齐方式不正确
Incorrect layout alignment in list Item of RecyclerView
我在设置 RecyclerView 中的布局时遇到问题。
这里是布局xml代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="1">
<TextView
android:id="@+id/dummy_text_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="0.5"
android:background="#ffffff" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.3"
android:text="Button"
android:textAllCaps="false" />
</LinearLayout>
这是我的 MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
List<String> list = new ArrayList<>();
for (int i = 0; i <= 25; i++) {
list.add("item " + i);
}
DummyRVAdapter adapter = new DummyRVAdapter(MainActivity.this, list);
recyclerView.setAdapter(adapter);
}
适配器代码:
public class DummyRVAdapter extends RecyclerView.Adapter<DummyRVAdapter.Holder> {
private Context mContext;
private List<String> mList;
public DummyRVAdapter(Context context, List<String> list) {
this.mContext = context;
this.mList = list;
}
@Override
public DummyRVAdapter.Holder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(mContext, R.layout.item_dummy_layout, null);
//View view =LayoutInflater.from(mContext).inflate(R.layout.item_dummy_layout, null);
return new Holder(view);
}
@Override
public void onBindViewHolder(DummyRVAdapter.Holder holder, int position) {
holder.textView.setText(mList.get(position));
}
@Override
public int getItemCount() {
return mList.size();
}
public class Holder extends RecyclerView.ViewHolder {
TextView textView;
public Holder(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.dummy_text_view);
}
}
}
我的输出截图。
在我的布局 XML 文件中,我将 textView 的大小声明为 50%,将 Button 的大小声明为 30%
,但是,我的 recyclerView 仍然没有以正确的方式显示它没有以正确的方式显示。
此布局在列表视图中工作正常。
我不知道我的代码哪里出了问题。我以正确的方式将 布局管理器和适配器 设置到我的 RecyclerView。
编辑:
请查看 ScreenShot,它显示 TextView 未分配 50% 的屏幕,这就是问题所在。
我为 Recyclerview 创建了复杂的布局,它的对齐方式不是上述格式。
但在列表视图中有效
谁能帮我解决这个问题?
提前致谢。
As android:weightSum="1"
但所有 android:layout_weight
的总和不等于 1,因此显示不正确
您已将 textView
的大小声明为 50%,将 Button
的大小声明为 30%,但其余剩余为 20%,因此未以正确的方式显示。所以可以将 textview
增加到 70%,将 Button
增加到 30%,这样 android:weightSum
和 android:layout_weight
总和将相等。
将布局更改为
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="1" >
<TextView
android:id="@+id/dummy_text_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.7"
android:background="#ffffff" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.3"
android:text="Button"
android:textAllCaps="false" />
</LinearLayout >
它不仅仅是重量有问题,它的视图文本视图可能占用了它的大小,但它的文本比按钮大小更小
一件重要的事情即使在重量之后或没有重量之后,也可以使用按钮中的最小尺寸和最大尺寸来根据需要适合它,就像在您的布局中一样:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="1">
<TextView
android:id="@+id/dummy_text_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="0.5"
android:background="#ffffff" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.3"
android:text="Button"
android:max_height="30dp"
android:textAllCaps="false" />
而不是
View view = View.inflate(mContext, R.layout.item_dummy_layout, null);
使用:
View view = LayoutInflater.from(mContext).(R.layout.item_dummy_layout, parent, false);
我在设置 RecyclerView 中的布局时遇到问题。
这里是布局xml代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="1">
<TextView
android:id="@+id/dummy_text_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="0.5"
android:background="#ffffff" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.3"
android:text="Button"
android:textAllCaps="false" />
</LinearLayout>
这是我的 MainActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
List<String> list = new ArrayList<>();
for (int i = 0; i <= 25; i++) {
list.add("item " + i);
}
DummyRVAdapter adapter = new DummyRVAdapter(MainActivity.this, list);
recyclerView.setAdapter(adapter);
}
适配器代码:
public class DummyRVAdapter extends RecyclerView.Adapter<DummyRVAdapter.Holder> {
private Context mContext;
private List<String> mList;
public DummyRVAdapter(Context context, List<String> list) {
this.mContext = context;
this.mList = list;
}
@Override
public DummyRVAdapter.Holder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(mContext, R.layout.item_dummy_layout, null);
//View view =LayoutInflater.from(mContext).inflate(R.layout.item_dummy_layout, null);
return new Holder(view);
}
@Override
public void onBindViewHolder(DummyRVAdapter.Holder holder, int position) {
holder.textView.setText(mList.get(position));
}
@Override
public int getItemCount() {
return mList.size();
}
public class Holder extends RecyclerView.ViewHolder {
TextView textView;
public Holder(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.dummy_text_view);
}
}
}
我的输出截图。
在我的布局 XML 文件中,我将 textView 的大小声明为 50%,将 Button 的大小声明为 30% ,但是,我的 recyclerView 仍然没有以正确的方式显示它没有以正确的方式显示。
此布局在列表视图中工作正常。
我不知道我的代码哪里出了问题。我以正确的方式将 布局管理器和适配器 设置到我的 RecyclerView。
编辑: 请查看 ScreenShot,它显示 TextView 未分配 50% 的屏幕,这就是问题所在。
我为 Recyclerview 创建了复杂的布局,它的对齐方式不是上述格式。
但在列表视图中有效
谁能帮我解决这个问题?
提前致谢。
As android:weightSum="1"
但所有 android:layout_weight
的总和不等于 1,因此显示不正确
您已将 textView
的大小声明为 50%,将 Button
的大小声明为 30%,但其余剩余为 20%,因此未以正确的方式显示。所以可以将 textview
增加到 70%,将 Button
增加到 30%,这样 android:weightSum
和 android:layout_weight
总和将相等。
将布局更改为
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="1" >
<TextView
android:id="@+id/dummy_text_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.7"
android:background="#ffffff" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.3"
android:text="Button"
android:textAllCaps="false" />
</LinearLayout >
它不仅仅是重量有问题,它的视图文本视图可能占用了它的大小,但它的文本比按钮大小更小
一件重要的事情即使在重量之后或没有重量之后,也可以使用按钮中的最小尺寸和最大尺寸来根据需要适合它,就像在您的布局中一样:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="1">
<TextView
android:id="@+id/dummy_text_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="0.5"
android:background="#ffffff" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.3"
android:text="Button"
android:max_height="30dp"
android:textAllCaps="false" />
而不是
View view = View.inflate(mContext, R.layout.item_dummy_layout, null);
使用:
View view = LayoutInflater.from(mContext).(R.layout.item_dummy_layout, parent, false);