web-dev-qa-db-ja.com

CoordinatorLayoutなしでスナックバーを表示する

CoordinatorLayoutを使用してスナックバーを表示しましたが、一部のレイアウトではCoordinatorLayoutレイアウトを使用していません。スナックバーを表示したいのですが、問題が発生しました。

CoordinatorLayoutなしでスナックバーを達成するために次の方法を試しましたが、次の結果が表示されます。

Snackbar.make(getActivity().getWindow().getDecorView().getRootView(), "Testing Snackbar", Snackbar.LENGTH_LONG).show();

enter image description here

Android 8.0 Oreoでテストします

CoordinatorLayoutなしでSnackbarを実現する方法はありますか?

前もって感謝します。

コード

public class FirstFragment extends Fragment {

RelativeLayout rootView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_first, container, false);

        Log.e("onCreateView", "onCreateView");

        rootView = (RelativeLayout)view.findViewById(R.id.rootView);
        setSnackBar(rootView, "Testing with answered");
        return view;
    }

public static void setSnackBar(View coordinatorLayout, String snackTitle) {
        Snackbar snackbar = Snackbar.make(coordinatorLayout, snackTitle, Snackbar.LENGTH_SHORT);
        snackbar.show();
        View view = snackbar.getView();
        TextView txtv = (TextView) view.findViewById(Android.support.design.R.id.snackbar_text);
        txtv.setGravity(Gravity.CENTER_HORIZONTAL);
    }
}
9
Nilesh Panchal
_public static void setSnackBar(View root, String snackTitle) {
  Snackbar snackbar = Snackbar.make(root, snackTitle, Snackbar.LENGTH_SHORT);
  snackbar.show();
  View view = snackbar.getView();
  TextView txtv = (TextView) view.findViewById(Android.support.design.R.id.snackbar_text);
  txtv.setGravity(Gravity.CENTER_HORIZONTAL);
}
_

上記のメソッドを呼び出して、LinearLayoutRelativeLayoutScrollViewなどの親レイアウトを渡します。次に例を示します。

_setSnackBar(layout,"This is your SnackBar");  //here "layout" is your parentView in a layout
_

findViewById()を使用してビューを見つけることを忘れないでください。

14
Shashwat Gupta

この簡単なコードを試してください。Androidフレームワーク自体からのダミービューが使用されます

Snackbar.make(findViewById(Android.R.id.content),"Your Text Here",Snackbar.LENGTH_SHORT).show();

15
Pemba Tamang

他の人がこれを行うための最良の解決策を提案しているように、これは前述の方法によるものです。 SnackBarを閉じるボタンでSnackBarを表示するオプションを追加します。これは、メッセージを読む時間をユーザーに与え、ユーザーがメッセージを読んだことをアプリケーションに通知する場合に役立ちます。

   public void setSnackBar(View root, String textToDisplay) {
    Snackbar snackbar = Snackbar.make(root, textToDisplay, Snackbar.LENGTH_INDEFINITE);
    snackbar.setAction("OK", new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            snackbar.dismiss();
            //your other action after user hit the "OK" button
        }
    });
    snackbar.show();
0
Rezor