7

GridViewが想定どおりに動作していません。このスクリーンショットは、GridView(横向きモード)が左にフラッシュされていることを示しています。中央に配置したい。

これは、GridViewのXMLレイアウトです。

<LinearLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/templatelandscape"
  android:orientation="horizontal"
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content">
<GridView 
  android:id="@+id/commandsbarlandscape"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_weight="1.0"
  android:layout_alignParentTop="true"
  android:layout_centerInParent="true"
  android:padding="0dp"
  android:verticalSpacing="2dp"
  android:horizontalSpacing="2dp"
  android:numColumns="auto_fit"
  android:columnWidth="52dp"
  android:stretchMode="spacingWidth"
  android:gravity="fill_horizontal" />
</LinearLayout>

私は何を間違っているのですか?

4

7 に答える 7

3

あなたがあなたの問題を解決したかどうかはわかりませんが(私はそう願っています、そしてまた私はこの投稿に答えるのが非常に遅いです!)、しかしここに手がかりがあります:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center" >

    <GridView
        android:id="@+id/gridview2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:columnWidth="90dp"
        android:numColumns="auto_fit"
        android:stretchMode="spacingWidth" >

    </GridView>
</LinearLayout>

残念ながら、これはグリッド上に1つのコンテンツがある場合にのみ機能します。多分誰かがそれを改善することができます!

于 2013-01-26T15:47:47.653 に答える
1
  1. android:layout_height="wrap_content"のような独自のスクロール機能を持​​つウィジェットには意味がありませんGridView

  2. android:layout_alignParentTop="true"でありandroid:layout_centerInParent="true"RelativeLayoutではありませんLinearLayout

を取り除き、android:layout_weight="1.0"または特定の身長に変更し、android:layout_heightをに変更すると、体調が良くなる可能性があります。"fill_parent"LinearLayoutRelativeLayout

于 2009-10-09T15:37:53.540 に答える
1

次の属性で LinearLayout の値を設定します

android:gravity="center".

グリッドビューから次の行を削除します

android:layout_centerInParent="true"
于 2012-02-22T05:23:42.887 に答える
0

LinearLayout で GridView を設定する代わりに、RelativeLayoutで設定し、GridView でlayout_centerHorizo​​ntal=truelayout_centerVertical=trueを設定します。

于 2013-02-18T12:52:15.513 に答える
0

私が見つけた最良の解決策は、コードでこれを行うことです。

これは私のxmlです

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:dslv="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f1f1f1"
android:orientation="vertical">

<GridView
    android:id="@+id/radio_list_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipToPadding="false"
    android:divider="@null"
    android:drawSelectorOnTop="true"
    android:paddingBottom="@dimen/gridview_column_space"
    android:paddingTop="@dimen/gridview_column_space"
    android:columnWidth="@dimen/gridview_column_width"
    android:numColumns="auto_fit"
    android:verticalSpacing="@dimen/gridview_column_space"
    android:horizontalSpacing="@dimen/gridview_column_space"
    android:stretchMode="none"
    android:scrollbars="none"
    />

<include layout="@layout/placeholder" />

そして、これは私のフラグメントに魔法をかけるコードです:

    @Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    mGridView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
                Point point = Common.getScreenSize(getActivity());

                int rowSpace = getResources().getDimensionPixelSize(R.dimen.gridview_column_space);
                int rowWidth = getResources().getDimensionPixelSize(R.dimen.gridview_column_width) + rowSpace;

                int minWith = (point.x / rowWidth) * rowWidth;
                int padding = (point.x - minWith) / 2;
                RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(minWith + padding * 2, ViewGroup.LayoutParams.MATCH_PARENT);
                params.addRule(RelativeLayout.CENTER_IN_PARENT);


                mGridView.setPadding(padding + rowSpace / 2, 0, padding, 0);
                mGridView.setLayoutParams(params);

                mGridView.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
        } 

    }); } 
}
于 2015-11-12T14:22:30.323 に答える
0

RelativeLayout に切り替えて、グリッド ビューから水平パディングを削除してみてください。水平パディングが原因で、グリッドが中心からずれていました。パディングを作成するために、グリッド アイテム レイアウトの周りにビュー コンテナーを追加しました。

于 2012-01-06T23:50:29.187 に答える
0

GridLayout は次のようになります。

<LinearLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/templatelandscape"
  android:orientation="horizontal"
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content"
  android:layout_gravity="center_horizontal">
<GridView 
  android:id="@+id/commandsbarlandscape"
  android:background="@android:color/darker_gray"
  android:layout_gravity="center_horizontal"
  android:layout_width="0dp"
  android:layout_height="wrap_content"
  android:layout_weight="1.0"
  android:verticalSpacing="2dp"
  android:horizontalSpacing="2dp"
  android:numColumns="auto_fit"
  android:columnWidth="52dp"
  android:stretchMode="none"
  android:gravity="fill_horizontal" />

android:layout_gravity="center_horizo​​ntal" を親レイアウトに配置するだけで、gridlayout が親センターに設定されますが、必要に応じてコンテンツがセンターに設定されません。また、android:layout_width="0dp" を追加しました。これは、「0dp」を指定すると、「warp_content」プロパティと等しいため、より良い結果が表示されます。また、RelativeLayout を使用していない場合は、追加した相対的なレイアウト属性を削除しました。何もしないプロパティを使用しても意味がありません。

テスト目的で、次のxmlコードを使用してテストするだけでなく、正しく機能していることを確認できます

<LinearLayout 
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/templatelandscape"
  android:orientation="horizontal"
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content"
  android:layout_gravity="center_horizontal">
<GridView 
  android:id="@+id/commandsbarlandscape"
  android:background="@android:color/darker_gray"
  android:layout_width="300dp"
  android:layout_height="wrap_content"
  android:layout_weight="1.0"
  android:verticalSpacing="2dp"
  android:horizontalSpacing="2dp"
  android:numColumns="auto_fit"
  android:columnWidth="52dp"
  android:stretchMode="none"
  android:gravity="fill_horizontal" />
</LinearLayout>

上記の xml は、グリッド レイアウトが親の中央にあるが、コンテンツではないことを示しています。

この説明が役に立てば幸いです...

于 2012-06-23T09:05:47.293 に答える