2016-04-19 5 views
3

現在、Androidゲームを開発中です。私は断片の中の私のコンテンツに問題があります。コンテンツが途切れると問題を見つけることができません。私は、異なるレイアウトを定義するリソースディレクトリのみを使用します。だから私は問題がレイアウトにあることを知っている。最初に私はandroid:layout_height="match_parent"を使った事実と関係があると思った。私はこのソリューションをStackOverflowで見つけたので、私の問題も解決することを期待しました。しかし、これはまったく私を助けませんでした。フラグメントのコンテンツが途切れる

私はactivity_game.xmlです。そこには、現在表示されているFragmentのプレースホルダがあります。内容は以下の通りです:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="y.trader.com.rhcloud.blackmonster.games.tradery.activity.GameActivity"> 

    <FrameLayout 
    android:id="@+id/fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

</RelativeLayout> 

Fragment自体が定義された以下のレイアウトがあります。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal"> 

    <TextView 
    android:id="@+id/money" 
    style="@style/traderY.TextCenter" /> 

    <TextView 
    android:id="@+id/location" 
    style="@style/traderY.TextCenter" /> 

    <ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/junkie_icon"/> 

    <ListView 
    android:id="@+id/drug_list" 
    style="@style/traderY.List" /> 

    <TableRow 
    style="@style/traderY.ButtonRow"> 

    <Button 
     android:id="@+id/sell_drugs" 
     style="@style/traderY.ButtonCenter" 
     android:text="@string/sell"/> 

    <Button 
     android:id="@+id/nothing" 
     style="@style/traderY.ButtonCenter" 
     android:text="@string/nothing"/> 

    </TableRow> 

</LinearLayout> 

そしてここでは、問題を表示するキャプチャ画面です。

Screen capture

あなたが見ることができるように、最後の2つのボタンがカットされています。私はそれを避け、ユーザーが下にスクロールできるようにしたいと思います。私は死んだ状態にあり、私はどんな助けにも感謝します。そして私は、問題を十分理解して理解できるようになることを願っています。

答えて

1

ScrollViewを使用せずに、あなたはListViewためweightを設定することができます。このソリューションをお試しください:

<ListView 
    ... 
    android:layout_weight="1"/> 
+0

私は 'ScrollView'がそのトリックをしなかったので、試してみます。 –

+0

申し訳ありませんが、私は私の答えを更新しました。 'TableRow'の代わりに' ListView'を使用しました –

+0

これを使って、ListViewはスクロールします。そのようにしてコンテンツが完全に表示されます。私はコンテンツ全体をスクロールしたかったのですが、この解決法も十分です。ありがとう! –

0

あなたがスクロールを可能にするためにScrollviewであなたのフラグメントのレイアウトをラップする必要があります。

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true"> 

<!-- your layout here --> 

</ScrollView> 

あなたが現在使用中のそれの例を見ることができます:Android ScrollView Example

+0

私はそれをすぐに試してみましょう。これをフラグメントレイアウトの 'LinearLayout'の中で行うべきでしょうか、' LinearLayout'を 'ScrollView'に置き換えることをお勧めしますか? –

+0

OK、私はあなたの解決策を得ると思います。 'LinearLayout'を' ScrollView'の中に置かなければなりません。 –

+0

はい通常、 'ScrollView'の中に' LinearLayout'を置きます。 – Simon

0

あなたは

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 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" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="y.trader.com.rhcloud.blackmonster.games.tradery.activity.GameActivity"> 

    <FrameLayout 
    android:id="@+id/fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

</RelativeLayout> 
+0

それは私を助けません。ここで質問をする前に私はすでにそれを試みました。とにかくありがとう。 –

0

をmatch_parentためにあなたの親コンテナの高さを確認する必要があり、それはListViewコントロールが含まれており、ネストされたスクロールビューは避けなければならないので、私は、ScrollViewにあなたの全体のレイアウトを包む避けるだろう。代わりに、ボタンをリストの一番下に表示する場合は、ListViewの最後のリスト項目にすることができます。これを行うには、アダプタにgetItemViewType(int position)getViewTypeCount()を上書きする必要があります。

もう1つの解決策は、ListViewとTableViewをRelativeLayoutに置き、次にTableViewを最後に宣言することによって、ListViewの上にボタンを配置することです。

0

レイアウトに既にリストビューが含まれていて、スクロールビューが親のレイアウトを適用していない場合、ただし、それを使用したい場合は、リストビューの高さを動的に設定して、スクロールせずにすべてのアイテムを表示することができます。あなただけの、この方法には、あなたのListViewコントロールIDを渡すこの小さなコード

public static void setListViewHeightBasedOnChildren(final ListView listView) { 
      listView.post(new Runnable() { 
       @Override 
       public void run() { 
        ListAdapter listAdapter = listView.getAdapter(); 
        if (listAdapter == null) { 
         return; 
        } 
        int totalHeight = listView.getPaddingTop() + listView.getPaddingBottom(); 
        int listWidth = listView.getMeasuredWidth(); 
      for (int i = 0; i < listAdapter.getCount(); i++) { 
         View listItem = listAdapter.getView(i, null, listView); 
         listItem.measure(
           View.MeasureSpec.makeMeasureSpec(listWidth, View.MeasureSpec.EXACTLY), 
         View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 


         totalHeight += listItem.getMeasuredHeight(); 
         Log.d("listItemHeight " + listItem.getMeasuredHeight(), "********"); 
        } 

        Log.d("totalHeight " + totalHeight, "********"); 

        ViewGroup.LayoutParams params = listView.getLayoutParams(); 
        params.height = (int) ((totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)))); 
        listView.setLayoutParams(params); 
        listView.requestLayout(); 

       } 
      }); 
     } 

を使用することによって、これを達成することができ、それはあなたのために動的にリストビューの高さを設定します。問題なくスクロールビューを使用して、必要に応じてコンテンツ全体をスクロールすることができます。

用法:

ListView yourListView = (ListView) findViewById(R.id.your_list_view); 

    YourListViewAdapter adapter = new YourListViewAdapter(); 

    yourListView.setAdapter(adapter); 

    //set height here 
    setListViewHeightBasedOnChildren(yourListView); 

はそれがお役に立てば幸いです。ハッピーコーディング:)

関連する問題