简体   繁体   English

如何修改包含 LayoutInflater 按钮和 editText 的 Android Snackbar

[英]How to make modification Android Snackbar containing with LayoutInflater button and editText

My project now is how to make a Snackbar displayed at the bottom of the screen.我现在的项目是如何制作一个显示在屏幕底部的 Snackbar。 The Snackbar contain with editText and three button for selection categories. Snackbar 包含 editText 和三个用于选择类别的按钮。 I use LayoutInflater and follow these code for my script, and it's work.我使用 LayoutInflater 并为我的脚本遵循这些代码,它的工作。 My problem now is, how to get response when user click the button ?我现在的问题是,当用户单击按钮时如何获得响应? Here my code这是我的代码

         @Override
         public void onClick(View v) {

            CoordinatorLayout linearLayout = (CoordinatorLayout)findViewById(R.id.coordinatorLayout);

            final Snackbar snackbar = Snackbar.make(linearLayout, "", Snackbar.LENGTH_INDEFINITE);
            Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView();

            // Inflate your custom view with an Edit Text
            LayoutInflater objLayoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View snackView = objLayoutInflater.inflate(R.layout.custom_snac_layout, null);
            // custom_snac_layout is your custom xml

            layout.addView(snackView, 0);
            snackbar.show();

        }

and here my snacbar.xml layout这里是我的 snacbar.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">
<EditText
    android:layout_marginTop="8dp"
    android:layout_marginBottom="8dp"
    android:id="@+id/event_text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scrollHorizontally="false"
    android:hint="@string/type_your_message"
    android:inputType="textNoSuggestions"
    android:maxLines="4"
    android:singleLine="false"
    android:textSize="18sp"
    android:paddingLeft="4dp" />

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:orientation="horizontal">
<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/btn_mapel"
    android:onClick="mapel"
    android:layout_gravity="bottom|right"
    android:layout_marginBottom="@dimen/fab_margin_bottom"
    android:layout_marginRight="@dimen/fab_margin_right"
    android:src="@drawable/ic_image_edit" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|right"
    android:layout_marginBottom="@dimen/fab_margin_bottom"
    android:layout_marginRight="@dimen/fab_margin_right"
    android:src="@drawable/ic_image_edit" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|right"
    android:layout_marginBottom="@dimen/fab_margin_bottom"
    android:layout_marginRight="@dimen/fab_margin_right"
    android:src="@drawable/ic_image_edit" />
</LinearLayout>

here is the source required to implement button listener to your snackbar custom layout.这是在您的小吃店自定义布局中实现按钮侦听器所需的源。

@Override
     public void onClick(View v) {

        CoordinatorLayout linearLayout = (CoordinatorLayout)findViewById(R.id.coordinatorLayout);

        final Snackbar snackbar = Snackbar.make(linearLayout, "", Snackbar.LENGTH_INDEFINITE);
        Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView();

        // Inflate your custom view with an Edit Text
        LayoutInflater objLayoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View snackView = objLayoutInflater.inflate(R.layout.custom_snac_layout, null);
        // custom_snac_layout is your custom xml

        // button id for snackbar
        Button button_mapel = (Button) snackView.findViewById(R.id.btn_mapel);

        // perform button click listener
        button_mapel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           // here perform your button click task
           }
        });

        layout.addView(snackView, 0);
        snackbar.show();

    }

Follow this documentation遵循此文档

https://developer.android.com/training/snackbar/action.html https://developer.android.com/training/snackbar/action.html

public class MyUndoListener implements View.OnClickListener{

    &Override
    public void onClick(View v) {

        // Code to undo the user's last action
    }
}

Now for setAction()现在为 setAction()

Snackbar mySnackbar = Snackbar.make(findViewById(R.id.myCoordinatorLayout),
                                R.string.email_archived, Snackbar.LENGTH_SHORT);
mySnackbar.setAction(R.string.undo_string, new MyUndoListener());
mySnackbar.show();

You have to get id of your Button .您必须获得Button id 。 And have to set clickListener .并且必须设置clickListener

You have to just replace your code with this.你只需要用这个替换你的代码。

I have put listener on btn_mapel , you can put any other button according to your requirement.我已经在btn_mapel上放置了侦听btn_mapel ,您可以根据需要放置任何其他按钮。

Try this.尝试这个。

     @Override
     public void onClick(View v) {

        CoordinatorLayout linearLayout = (CoordinatorLayout)findViewById(R.id.coordinatorLayout);

        final Snackbar snackbar = Snackbar.make(linearLayout, "", Snackbar.LENGTH_INDEFINITE);
        Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView();

        // Inflate your custom view with an Edit Text
        LayoutInflater objLayoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View snackView = objLayoutInflater.inflate(R.layout.custom_snac_layout, null);
        // custom_snac_layout is your custom xml

        Button mapelBt = (Button)snackView.findViewById(R.id.btn_mapel);

        mapelBt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

             // Get your button click callback here
        }
    });


        layout.addView(snackView, 0);
        snackbar.show();

    }

Try This,尝试这个,

Button btn_feed_back = (Button)snackView.findViewById(R.id.feedback);
    btn_feed_back.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM