1

我有一個設置頁邊距到GridLayout中多次使用的自定義線性佈局類的問題。 Gridlayout放置在一個片段中。 這是fragment_grid.xml的代碼:Android - 如何在GridLayout中爲自定義LinearLayouts設置保證金?

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="app_a_tize.expressme.Fragment.GridFragment" 
android:layout_gravity="center"> 

<GridLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/orange" 
    android:layout_margin="5dp" 
    android:id="@+id/gridlayout_grid"></GridLayout> 
</FrameLayout> 

這是GridFragment.java的代碼:

public class GridFragment extends Fragment { 
public GridFragment() { 
    // Required empty public constructor 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_grid, container, false); 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    GridLayout grid = (GridLayout) getView().findViewById(R.id.gridlayout_grid); 
    grid.setRowCount(3); 

    int tileHeight = (CategoryTileActivity.gridContentHeight -3 * 10)/3; 
    int amountofColumns = (int) CategoryTileActivity.gridContentWidth/tileHeight; 
    grid.setColumnCount(amountofColumns); 
    grid.setMinimumWidth((amountofColumns * tileHeight) + (5 * 20)); 

    for (int i = 0; i < 3 * amountofColumns; i++) { 
    //fill the grid with the custom LinearLayout: 
     grid.addView(new TileClass(getActivity(), tileHeight, tileHeight, "ToBeImplemented", "Button")); 
    } 

} 
} 

這是自定義的LinearLayout的代碼:

public class TileClass extends LinearLayout { 
public TileClass(Context context, int height, int width, String image, String text) { 
    super(context); 
    this.setBackgroundResource(R.drawable.tile_button); //creates rounded layouts 
    this.setMinimumHeight(height); 
    this.setMinimumWidth(width); 
    this.setOrientation(LinearLayout.VERTICAL); 

    ImageView tileImage = new ImageView(context); 

    Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.tilephoto); 
    Bitmap bMapScaled = Bitmap.createScaledBitmap(bMap, 100, 100, true); 
    tileImage.setImageBitmap(bMapScaled); 

    tileImage.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

    TextView tileText = new TextView(context); 
    tileText.setText(text); 
    tileText.setTextColor(Color.WHITE); 
    tileText.setGravity(Gravity.CENTER); 

    addView(tileImage); 
    addView(tileText); 
} 
} 

當我運行的活動,我得到這個結果爲: Here you can see there is no margin on every button in the orange area.

我上面顯示的代碼負責中間的橙色區域。

我需要的是:藍色「按鈕」/ LinearLayouts,在中間的橙色區域,具有5dp的邊距。所以橙色空間的其餘部分由自定義LinearLayouts拍攝。

我不知道如何解決這個問題,我嘗試了很多選擇,但他們似乎沒有爲我工作..一切從MarginLayoutParams到params.setMargins(5,5,5,5);幾乎在我的代碼中的每個佈局。

我使用Android Studio 2.1.2,支持最低API 15。
對於你的想象力,這一定是最後的結果,我需要這樣的邊緣: This is the endresult of the GridLayout in the middle

+0

您需要採用LinearLayout.LayoutParams的對象,並在您的TileClass中設置邊距和所有邊距,它會幫助您 – Vickyexpert

+0

謝謝,但您的解決方案不起作用。 – 476rick

回答

2

你必須做如下的GridView項的自定義視圖: -

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/categoryHeight" 
    android:layout_marginLeft="@dimen/margin_5dp" 
    android:layout_marginRight="@dimen/margin_5dp" 
    android:layout_marginTop="@dimen/margin_7dp" 
    android:background="@drawable/rounded_bg" 
> 

    <ImageView 
     android:id="@+id/llRowItem" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:scaleType="fitXY" 
     android:gravity="bottom"/> 

     <TextView 
      android:id="@+id/item_name" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@color/black_light" 
      android:padding="@dimen/margin_5dp" 
      android:layout_gravity="bottom" 
      android:singleLine="true" 
      android:textColor="@color/white" 
      android:textSize="@dimen/font_size_16sp" /> 
</FrameLayout> 

和轉接器內無論您想設置的文字視圖的顏色,背景,文字或圖像的圖像。

+0

謝謝你,你的評論解決了我的問題。現在我需要寫適配器,我似乎不太明白..但感謝您的幫助! – 476rick

相關問題