2017-08-14 57 views
-2

我有一些LinearLayout(我们称之为root)。我想添加到8行和5列的布局40个按钮。对于每一行我都有特别的LinearLayout。另外每个按钮都有自己的widthheight。 下面你可以看到我是如何产生并添加按钮layout如何用给定的高度和宽度按步生成40个按钮?

for(int i = 0 ; i<8 ; i++) 
    { 

     LinearLayout linearLayout = new LinearLayout(this); 

     linearLayout.setOrientation(LinearLayout.HORIZONTAL); 

     linearLayout.setGravity(Gravity.CENTER); 

     for(int j = 0 ; j<5 ; j++) { 


      Button button = new Button(this); 



      LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(dpToPx(45), dpToPx(45)); //convert dp to px here 

      params.setMargins(5, 5, 5, 5); 

      button.setLayoutParams(params); 

      button.setBackgroundResource(R.drawable.letter_real_background); 

      linearLayout.addView(button); 

     } 

     root.addView(linearLayout); // adding to root 


    } 

那么是什么问题?低于root我有一些TextView 覆盖一些小设备上的按钮。在我看来,原因如下:TextView我有RecyclerView,其中包含一组宽度为wrap_content和高度wrap_content的图像。我的意思是,图像可以有任何大小设置为它和RecyclerView上推TextView,其上覆盖8x5按钮。以下是我的xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="com.incubic.second.soz.MainActivity" 
    android:background="@color/main_back_color" 
    android:layout_margin="5dp"> 

    <LinearLayout 
     android:id="@+id/root" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@+id/text" 
     android:orientation="vertical"> 

    </LinearLayout> 

    <TextView 
     android:id="@+id/text" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:height="60dp" 
     android:gravity="center" 
     android:layout_above="@+id/citiesInMainActivity" 
     android:textSize="30sp"/> 


    <android.support.v7.widget.RecyclerView 
     android:id="@+id/citiesInMainActivity" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:orientation="horizontal" 
     app:layoutManager="android.support.v7.widget.LinearLayoutManager" 
     > 
    </android.support.v7.widget.RecyclerView> 

    <ProgressBar 
     android:id="@+id/progress_bar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:visibility="gone" 
     /> 

</RelativeLayout> 

所以我的问题是如何解决覆盖问题?怎么做才能预防呢?是否建议使用GridLayout而不是每次都生成新的LinearLayout?

回答

1

文本视图仍在您的相对视图中。

我还添加了scrollview作为奖励,因为宽度和高度未知。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="com.incubic.second.soz.MainActivity" 
    android:background="@color/main_back_color" 
    android:layout_margin="5dp"> 

    <ScrollView 
     android:id="@+id/fullscreen_content" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <LinearLayout 
      android:id="@+id/linear_wrapper" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:orientation="vertical"> 

      <LinearLayout 
       android:id="@+id/root" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_above="@+id/text" 
       android:orientation="vertical"> 

      </LinearLayout> 

      <TextView 
       android:id="@+id/text" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:height="60dp" 
       android:gravity="center" 
       android:layout_above="@+id/citiesInMainActivity" 
       android:textSize="30sp"/> 


      <android.support.v7.widget.RecyclerView 
       android:id="@+id/citiesInMainActivity" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_alignParentBottom="true" 
       android:orientation="horizontal" 
       app:layoutManager="android.support.v7.widget.LinearLayoutManager" 
       > 
      </android.support.v7.widget.RecyclerView> 

      <ProgressBar 
       android:id="@+id/progress_bar" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_alignParentBottom="true" 
       android:visibility="gone" 
       /> 
     </LinearLayout> 
    </ScrollView> 
</RelativeLayout> 
+0

为什么我需要'linear_wrapper'? – abay

+1

当他们尝试脱离屏幕并且视图中出现“match_parent”时,情况变得很奇怪。更多信息检查: https://stackoverflow.com/questions/17968344/how-to-avoid-overlap-view-in-relative-layout-in-android 它工作吗? :) –

+0

不幸的是,它不起作用,导致您在'LinearLayout'内使用'RelativeLayout'的属性,例如'alignParentBottom'。 – abay