2

ListViewcustom の内側を回転させようとしていますpopupWindow。以下は私のセットアップです:

ポップアップ XML は次のboard_dialog.xmlとおりです。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/boardll"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center">

    <ListView
        android:id="@+id/boardoptions"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/options_array_board" /> 
</RelativeLayout>

私のカスタムBoardPopupクラス:

public class BoardPopup extends PopupWindow {
    private static final String TAG = BoardPopup.class.getSimpleName();    

    Context context;  
    RelativeLayout ll;
    ListView lv;

    private OnSubmitListener mListener;  

    public BoardPopup (Context ctx, OnSubmitListener listener) {  
        super(ctx);  

        context = ctx;  
        mListener = listener;  

        setContentView(LayoutInflater.from(context).inflate(R.layout.board_dialog, null));  
        setHeight(WindowManager.LayoutParams.WRAP_CONTENT);  
        setWidth(WindowManager.LayoutParams.WRAP_CONTENT);  
        View popupView = getContentView();  
        setFocusable(true);  

        lv = (ListView) popupView.findViewById(R.id.boardoptions);
        ll = (RelativeLayout) popupView.findViewById(R.id.boardll);        
    }  

    public void show(View v) {        
        showAtLocation(v, Gravity.CENTER, 0, 0); 
    }  

    public interface OnSubmitListener {  
        void valueChanged(String name, String number);  
    }

    public void fixDimensions() {
        getContentView().setBackgroundColor(Color.RED); //to highlight views
        ll.setRotation(90);
        update(292,630); //These numbers are not meant to be constant        
    }  
}

私のアクティビティでは、ポップアップを表示しonWindowFocusChanged、ポップアップ内のビューの描画後の寸法を取得するためにオーバーライドする必要があります:

popup = new BoardPopup(c, MainGamePanel.this);
popupJustCreated = true;
popup.show(v);

.

@Override
 public void onWindowFocusChanged(boolean hasFocus) {
      super.onWindowFocusChanged(hasFocus);
      if (popup!=null && popupJustCreated) {
          popup.fixDimensions();
          popupJustCreated = false;
      }
 }

コメントアウトしてコメントインするll.setRotation(90);と、すべてが正常に見えます。update(292,630);fixDimensions()

ここに画像の説明を入力


に追加するとll.setRotation(90);

ここに画像の説明を入力


最後に、次を追加するとupdate(292,630);:

ここに画像の説明を入力


最終的な画像で、レイアウトがポップアップを埋めないのはなぜですか? その灰色の領域はどのようなビューですか? これを正常に回転およびサイズ変更するにはどうすればよいですか?

私が試した他のいくつかのことは成功しませんでした:

  • LinearLayoutの代わりに使用RelativeLayout
  • wrap_contentとのすべての異なる組み合わせmatch_parent
  • カスタムで基本的に同じことをするDialogFragment
4

1 に答える 1