1. ホーム
  2. android

[解決済み] AndroidにおけるフルスクリーンDialogFragment

2022-04-14 15:16:29

質問

ほぼフルスクリーンでDialogFragmentを表示させようとしています。しかし、どうにもこうにもうまくいきません。

フラグメントを表示する方法は、アンドロイドの開発者向けドキュメントからそのまま引用しています。

FragmentManager f = ((Activity)getContext()).getFragmentManager();
FragmentTransaction ft = f.beginTransaction();
Fragment prev = f.findFragmentByTag("dialog");
if (prev != null) {
    ft.remove(prev);
}
ft.addToBackStack(null);

// Create and show the dialog.
DialogFragment newFragment = new DetailsDialogFragment();
newFragment.show(ft, "dialog");

私は素朴に、フラグメントのRelativeLayoutをfill_parentに設定し、いくつかのminWidthとminHeightを設定してみました。

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"  
    android:minWidth="1000px" 
    android:minHeight="600px"
    android:background="#ff0000">

私は、DialogFragmentが画面の大部分を埋めることを期待しています。しかし、縦方向にはリサイズできるようですが、横方向にはある一定の幅までしかリサイズできないようです。

また、ここで提案されているように、コードでウィンドウの属性を設定することも試みました。 http://groups.google.com/group/android-developers/browse_thread/thread/f0bb813f643604ec . しかし、これも役に立ちませんでした。

私はAndroidがダイアログをどのように扱うかについて、おそらく何か誤解しているようです。どうしたらこのようなことができるのでしょうか?私の目標に到達するための別の方法はありますか?


Android端末です。

Asus EeePad Transformer

アンドロイド 3.0.1


更新しました。 今は、フラグメントに以下のコードを入れて、なんとかフルスクリーンにすることができました。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_FRAME, android.R.style.Theme_Holo_Light);
}

残念ながら、これは私が望むものとは全く違います。背景を表示するために、ダイアログの周りに小さなパディングが必要なのは確かです。

そのためのアイデアはありますか?

どのように解決するのですか?

に切り替えてみてください。 LinearLayout の代わりに RelativeLayout . テスト時は3.0のHoneycomb apiをターゲットにしていました。

public class FragmentDialog extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button button = (Button) findViewById(R.id.show);
    button.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            showDialog();
        }
    });
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
}

void showDialog() {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    DialogFragment newFragment = MyDialogFragment.newInstance();
    newFragment.show(ft, "dialog");
}

public static class MyDialogFragment extends DialogFragment {

    static MyDialogFragment newInstance() {
        MyDialogFragment f = new MyDialogFragment();
        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_dialog, container, false);
        return v;
    }

}
}

と、その レイアウト : fragment_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:minWidth="1000dp"  
    android:minHeight="1000dp"> 
 </LinearLayout> 

main.xml

<?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="match_parent"
    android:background="#ffffff">
    <Button android:id="@+id/show"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:text="show">
    </Button>
</LinearLayout>