我在图像-1(https://imgur.com/a/aO5Ss)中显示了ScrollView中的这些cardView,其中设备是垂直的,一切都是假设的,但是当设备水平倾斜时,第4行的第2行得到了截止如图所示image-2(https://imgur.com/9ykZew4)。请帮助解决为什么会这样,以及如何解决这个问题。 (注意 - 在第4张卡片中有一个列表视图,它是由colmn_row.xml中的textview夸大的)
activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
android:background="#ddd"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_main"
tools:context=".MainActivity">
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<android.support.v7.widget.CardView
android:id="@+id/num_stu"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fff"
android:elevation="10dp"
android:padding="16dp">
<ImageView
android:id="@+id/cardview_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginRight="18dp"
android:src="@mipmap/ic_launcher_round" />
<TextView
android:id="@+id/cardview_list_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/cardview_image"
android:paddingBottom="5dp"
android:text="Students"
android:textSize="24sp" />
<TextView
android:id="@+id/num_boys"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/cardview_list_title"
android:layout_toRightOf="@+id/cardview_image"
android:textColor="#8b8b8b" />
<TextView
android:id="@+id/num_girls"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/cardview_list_title"
android:layout_toRightOf="@+id/num_boys"
android:textColor="#8b8b8b" />
<TextView
android:id="@+id/total_stu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/num_girls"
android:layout_toRightOf="@+id/cardview_image"
android:textColor="#8b8b8b" />
</RelativeLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
android:id="@+id/num_teachers"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/num_stu"
android:layout_marginTop="16dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fff"
android:elevation="8dp"
android:padding="16dp">
<ImageView
android:id="@+id/cardview_image1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginRight="18dp"
android:src="@mipmap/ic_launcher_round" />
<TextView
android:id="@+id/cardview_list_title1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/cardview_image1"
android:paddingBottom="5dp"
android:text="Staff"
android:textSize="24sp" />
<TextView
android:id="@+id/numTeaching"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/cardview_list_title1"
android:layout_toRightOf="@+id/cardview_image1"
android:textColor="#8b8b8b" />
<TextView
android:id="@+id/non_num_Teaching"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/numTeaching"
android:layout_toRightOf="@+id/cardview_image1"
android:textColor="#8b8b8b" />
</RelativeLayout>
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView
android:id="@+id/attendance"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fff"
android:elevation="5dp"
android:padding="16dp">
<ImageView
android:id="@+id/cardview_image2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginRight="18dp"
android:src="@mipmap/ic_launcher_round" />
<TextView
android:id="@+id/cardview_list_title2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/cardview_image2"
android:paddingBottom="5dp"
android:text="Attendance"
android:textSize="24sp" />
<TextView
android:id="@+id/stuatten"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/cardview_list_title2"
android:layout_toRightOf="@+id/cardview_image2"
android:textColor="#8b8b8b"/>
<TextView
android:id="@+id/staffatten"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/stuatten"
android:layout_toRightOf="@+id/cardview_image2"
android:textColor="#8b8b8b" />
</RelativeLayout>
</android.support.v7.widget.CardView>
<!-- Fourth Card -->
<android.support.v7.widget.CardView
android:id="@+id/notice"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#fff"
android:elevation="8dp"
android:padding="16dp">
<TextView
android:id="@+id/title"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentTop="true"
android:paddingBottom="5dp"
android:textSize="19sp"
android:textStyle="bold"
android:text="ID"/>
<TextView
android:id="@+id/title1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentTop="true"
android:paddingBottom="5dp"
android:textSize="19sp"
android:textStyle="bold"
android:layout_marginLeft="115dp"
android:layout_toRightOf="@+id/title"
android:text="Title"/>
<TextView
android:id="@+id/title2"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentTop="true"
android:paddingBottom="5dp"
android:textSize="19sp"
android:textStyle="bold"
android:layout_toRightOf="@+id/title1"
android:layout_marginLeft="90dp"
android:text="Date From"/>
<TextView
android:id="@+id/title3"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_marginRight="60dp"
android:paddingBottom="5dp"
android:textSize="19sp"
android:textStyle="bold"
android:text="Date To"/>
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_below="@+id/title" >
</ListView>
</RelativeLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
</ScrollView>
</LinearLayout>
colmn_row.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="wrap_content">
<TextView
android:id="@+id/name"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:textStyle="bold"
android:textSize="17sp"/>
<TextView
android:id="@+id/gender"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:textSize="17sp"/>
<TextView
android:id="@+id/age"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:textSize="17sp"/>
<TextView
android:id="@+id/status"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_alignParentLeft="true"
android:layout_weight="1"
android:textSize="17sp"/>
</LinearLayout>
答案 0 :(得分:0)
答案 1 :(得分:0)
此问题是由于 colmn_row.xml 中的 layout_weight 值不变, colmn_row.xml 将根据设备屏幕宽度进行渲染。并且所有四个项目将共享相等的宽度。使您的列标题也具有特定的设备宽度。
以下是第4张牌布局的代码,
<android.support.v7.widget.CardView
android:id="@+id/notice"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fff"
android:elevation="8dp"
>
<TextView
android:id="@+id/title"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:paddingBottom="5dp"
android:textSize="19sp"
android:textStyle="bold"
android:text="ID"/>
<TextView
android:id="@+id/title1"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:paddingBottom="5dp"
android:textSize="19sp"
android:textStyle="bold"
android:layout_weight="1"
android:text="Title"/>
<TextView
android:id="@+id/title2"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:paddingBottom="5dp"
android:textSize="19sp"
android:textStyle="bold"
android:text="Date From"/>
<TextView
android:id="@+id/title3"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="1"
android:paddingBottom="5dp"
android:textSize="19sp"
android:textStyle="bold"
android:text="Date To"/>
</LinearLayout>
<LinearLayout
android:id="@+id/dynamic_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
</LinearLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
编辑:将listview放在scrollview中是个坏主意,尝试将LinearLayout中的布局作为父级扩展或在NestedScrollView中使用reyclerview,我已将lisview更新为linearlayout
以下是动态创建viiew的代码
@Override
protected void onCreate(Bundle savedInstanceState) {
//....
linearLayout = (LinearLayout) findViewById(R.id.dynamic_layout);
String[] demo = new String[]{"Hello","World","Java","Android"};
linearLayout.removeAllViews();
for(int i=0;i<demo.length;i++){
addView(demo[i]);
}
}
//Method to create view dynamically
private void addView(String data){
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//You can use this view to findViewById, setOnClickListener, setText etc;
View view = layoutInflater.inflate(R.layout.column_row,null,false);
//FindView using inflated view
TextView textView = view.findViewById(R.id.name);
linearLayout.addView(view);
}