CardView 未使用 LayoutInflater 正确充气
CardView is not inflating properly using LayoutInflater
我想以编程方式添加 CardView。
这是我的主要ActivityXML布局(activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/linearLayout1"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="vertical">
</LinearLayout>
这是我的 CardViewTemplate (card_view_template.xml)
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/cardViewTemplate"
android:layout_width="160dp"
android:layout_height="190dp"
android:layout_margin="10dp"
android:clickable="true"
android:foreground="?android:selectableItemBackground">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="This is a Card" />
</androidx.cardview.widget.CardView>
这是我的Java代码(MainActivity.java)
LayoutInflater inflater = getLayoutInflater();
ViewGroup parent = findViewById(R.id.linearLayout1);
inflater.inflate(R.layout.card_view_template, parent);
到这里一切正常。
现在我想在我的 activity_main.xml 中的某个位置添加卡片,因为我正在使用多个 CardView,我想在某个位置添加卡片。因此,我尝试了这个而不是上面的代码:
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.card_view_template, null);
ViewGroup parent = findViewById(R.id.linearLayout1);
parent.addView(view, 0);
但是它没有正常充气。只有文本是可见的,卡片似乎没有出现。
我建议你直接使用线性布局,如:
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.card_view_template, null);
LinearLayout LL = findViewById(R.id.linearLayout1);
LL.addView(view,0);
当动态添加视图时,我们不应该使用 null ViewGroup
父级扩充 View
。
在这个View view = inflater.inflate(R.layout.card_view_template, null);
这里parent被指定为null,这导致了问题。
指定 View
将附加到的父级,并且仅将附加到父级设置为 false
。这样将指定父级但不附加。
因此先声明parent(root)然后创建View
并指定parent(root)并设置attach到parent(root)false
这是正确的说法
View view = inflater.inflate(R.layout.card_view_template, parent, false);
因此完整的代码将是:
LayoutInflater inflater = getLayoutInflater();
ViewGroup parent = findViewById(R.id.linearLayout1);
View view = inflater.inflate(R.layout.card_view_template, parent, false);
parent.addView(view, 0);
我想以编程方式添加 CardView。
这是我的主要ActivityXML布局(activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/linearLayout1"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="vertical">
</LinearLayout>
这是我的 CardViewTemplate (card_view_template.xml)
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/cardViewTemplate"
android:layout_width="160dp"
android:layout_height="190dp"
android:layout_margin="10dp"
android:clickable="true"
android:foreground="?android:selectableItemBackground">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="This is a Card" />
</androidx.cardview.widget.CardView>
这是我的Java代码(MainActivity.java)
LayoutInflater inflater = getLayoutInflater();
ViewGroup parent = findViewById(R.id.linearLayout1);
inflater.inflate(R.layout.card_view_template, parent);
到这里一切正常。
现在我想在我的 activity_main.xml 中的某个位置添加卡片,因为我正在使用多个 CardView,我想在某个位置添加卡片。因此,我尝试了这个而不是上面的代码:
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.card_view_template, null);
ViewGroup parent = findViewById(R.id.linearLayout1);
parent.addView(view, 0);
但是它没有正常充气。只有文本是可见的,卡片似乎没有出现。
我建议你直接使用线性布局,如:
LayoutInflater inflater = getLayoutInflater();
View view = inflater.inflate(R.layout.card_view_template, null);
LinearLayout LL = findViewById(R.id.linearLayout1);
LL.addView(view,0);
当动态添加视图时,我们不应该使用 null ViewGroup
父级扩充 View
。
在这个View view = inflater.inflate(R.layout.card_view_template, null);
这里parent被指定为null,这导致了问题。
指定 View
将附加到的父级,并且仅将附加到父级设置为 false
。这样将指定父级但不附加。
因此先声明parent(root)然后创建View
并指定parent(root)并设置attach到parent(root)false
这是正确的说法
View view = inflater.inflate(R.layout.card_view_template, parent, false);
因此完整的代码将是:
LayoutInflater inflater = getLayoutInflater();
ViewGroup parent = findViewById(R.id.linearLayout1);
View view = inflater.inflate(R.layout.card_view_template, parent, false);
parent.addView(view, 0);