2017-11-30 16 views
1

私はカスタムビューを持っています。私はアンドロイドでトーストのようなカスタムビューを表示したい。あるトーストのようなカスタムビュー

Toast.makeText(getApplicationContext(),"text",Toast.LENGTH_LONG).show() 

、私は私のカスタムビューは、テキストなどの基本的な属性を変更することにより、(グローバルアプリ内)アプリでどこでも見せつけるたいです。

正しい方向に指摘してください。

注:addView()およびremoveView()を使用してカスタムビューを追加および削除したくありません。私はこのカスタムビューを使用する必要があるので、トーストのカスタマイズも私の場合は機能しません。

+0

あなたは、 'トーストトーストは=新しいトースト(Activity.this)を使用することができます。 toast.setView( "あなたのビュー"); 'これはこうです。 –

+0

Toastのソースコードを読むことができます:https://github.com/aosp-mirror/platform_frameworks_base/blob/master/core/java/android/widget/Toast.java – diegoveloper

答えて

3

あなたはカスタムトーストを所有することができます。メソッドはテキストとshow.haveの外観を取るでしょう。

public void showToast(String msg) { 

     LayoutInflater li = getLayoutInflater(); 
     View layout = li.inflate(R.layout.custom_toast, 
     (ViewGroup) findViewById(R.id.custom_toast_layout)); 
     TextView toastmsg = (TextView) layout.findViewById(R.id.custom_toast_message); 
     toastmsg.setText(msg); 
     Toast toast = new Toast(this); 
     toast.setDuration(Toast.LENGTH_LONG); 
     toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0); 
     toast.setView(layout); 
     toast.show(); 


    } 

custom_toast_message.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="wrap_content" 
    android:gravity="center" 
    android:orientation="vertical"> 

    <LinearLayout 
     android:id="@+id/custom_toast_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@drawable/toast_bg" 
     android:gravity="center_vertical" 
     android:orientation="horizontal"> 

     <ImageView 
      android:id="@+id/custom_toast_image" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:contentDescription="Custom Toast" 
      android:padding="15dp" 
      android:src="@drawable/icon_toast_alert" /> 

     <TextView 
      android:id="@+id/custom_toast_message" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:contentDescription="Custom Toast" 
      android:padding="15dp" 
      android:text="Custom Toast" 
      android:textAlignment="center" 
      android:textColor="@color/colorWhite" 
      android:textSize="18sp" /> 
    </LinearLayout> 

</LinearLayout> 

カスタムトーストルック:コーディングハッピー

enter image description here

!!

3

ITSは本当に簡単あなたはトーストクラスに

を拡張することによってそれを行うことができます私のカスタムトーストcalssはトーストクラスを拡張したNexoolCustomToastあるとしましょう。以下はカスタムトーストクラスのコードです。このクラスの

import android.app.Activity; 
    import android.app.Application; 
    import android.content.Context; 
    import android.view.Gravity; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.widget.TextView; 
    import android.widget.Toast; 

    /** 
    * Created by Abhishek on 24-03-2017. 
    */ 

    /** 
    * By Default shows Error i.e. Fail toast 
    * */ 
    public class NexoolCustomToast extends Toast { 

     private Context mContext; 

     private View mView; 

     private LayoutInflater mLayoutInflater; 

     private TextView mTitleTextView, mMessageTextView; 

     /** 
     * Construct an empty Toast object. You must call {@link #setView} before you 
     * can call {@link #show}. 
     * 
     * @param context The context to use. Usually your {@link Application} 
     *    or {@link Activity} object. 
     */ 
     public NexoolCustomToast(Context context) { 
      super(context); 
      mContext = context; 
      mLayoutInflater = LayoutInflater.from(context); 
      mView = mLayoutInflater.inflate(R.layout.nexool_fail_custom_toast, null); 
      initialiseView(mView); 
      setView(mView); 
      setGravity(Gravity.TOP | Gravity.END, 0, 0); 
     } 

     public NexoolCustomToast(Context context, boolean state) { 
      super(context); 
      mContext = context; 
      mLayoutInflater = LayoutInflater.from(context); 
      if (state) { 
       mView = mLayoutInflater.inflate(R.layout.nexool_success_custom_toast, null); 
      } else { 
       mView = mLayoutInflater.inflate(R.layout.nexool_fail_custom_toast, null); 
      } 
      initialiseView(mView); 
      setView(mView); 
      setGravity(Gravity.TOP | Gravity.END, 0, 0); 
     } 

     private void initialiseView(View mView) { 

      mTitleTextView = (TextView) mView.findViewById(R.id.titleTextView); 

      mMessageTextView = (TextView) mView.findViewById(R.id.messageTextView); 

     } 

     public void setTitle(String title) { 

      if (title != null && title.length() != 0) { 

       mTitleTextView.setText(title); 

      } else { 

       mTitleTextView.setVisibility(View.GONE); 

      } 

     } 

     public void setMessage(String message) { 

      if (message != null && message.length() != 0) { 

       mMessageTextView.setText(message); 

      } else { 

       mMessageTextView.setVisibility(View.GONE); 

      } 

     } 

     @Override 
     public void show() { 
      super.show(); 
     } 

     @Override 
     public void cancel() { 
      super.cancel(); 
     } 

     public static NexoolCustomToast makeText(Context mContext, String mTitle, String mMessage) { 
      NexoolCustomToast mNexoolCustomToast = new NexoolCustomToast(mContext); 

      mNexoolCustomToast.setTitle(mTitle); 

      mNexoolCustomToast.setMessage(mMessage); 

      return mNexoolCustomToast; 
     } 

     public static NexoolCustomToast makeText(Context mContext, String mTitle, String mMessage, boolean state) { 
      NexoolCustomToast mNexoolCustomToast = new NexoolCustomToast(mContext, state); 

      mNexoolCustomToast.setTitle(mTitle); 

      mNexoolCustomToast.setMessage(mMessage); 

      return mNexoolCustomToast; 
     } 
    } 

Iは、nexool_fail_custom_toast.xmlから4つのレイアウト画面サイズ(レイアウト大、レイアウト通常、レイアウト小、レイアウトXLARGE)とnexool_success_custom_toast.xmlをXMLレイアウトを使用しています。

 //layout-large/nexool_fail_custom_toast.xml 
     <?xml version="1.0" encoding="utf-8"?> 
     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@android:color/transparent"> 

      <LinearLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" 
       android:background="@android:color/white" 
       android:layout_alignParentEnd="true" 
       android:layout_marginTop="?android:attr/actionBarSize" 
       android:layout_marginBottom="15dp" 
       android:layout_marginRight="15dp" 
       android:elevation="5dp"> 

       <ImageButton 
        android:id="@+id/cancelToastImageButton" 
        android:layout_width="25dp" 
        android:layout_height="match_parent" 
        android:background="@android:color/holo_red_dark" 
        android:scaleType="centerInside"/> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="vertical" 
        android:padding="15dp"> 

        <TextView 
         android:id="@+id/titleTextView" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="Error Title" 
         android:minWidth="300sp" 
         android:textColor="@android:color/holo_red_dark" 
         android:textAppearance="?android:attr/textAppearanceMedium" /> 

        <TextView 
         android:id="@+id/messageTextView" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="Error Message" 
         android:minWidth="300sp" 
         android:paddingTop="10dp" 
         android:textColor="@android:color/black" 
         android:textAppearance="?android:attr/textAppearanceSmall"/> 

       </LinearLayout> 


      </LinearLayout> 

     </RelativeLayout> 







     //layout-large/nexool_success_custom_toast.xml 
     <?xml version="1.0" encoding="utf-8"?> 
     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@android:color/transparent"> 

      <LinearLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" 
       android:background="@android:color/white" 
       android:layout_alignParentEnd="true" 
       android:layout_marginTop="?android:attr/actionBarSize" 
       android:layout_marginBottom="15dp" 
       android:layout_marginRight="15dp" 
       android:elevation="5dp"> 

       <ImageButton 
        android:id="@+id/cancelToastImageButton" 
        android:layout_width="25dp" 
        android:layout_height="match_parent" 
        android:background="@android:color/holo_green_light" 
        android:scaleType="centerInside"/> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="vertical" 
        android:padding="15dp"> 

        <TextView 
         android:id="@+id/titleTextView" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="Error Title" 
         android:minWidth="300sp" 
         android:textColor="@android:color/holo_green_light" 
         android:textAppearance="?android:attr/textAppearanceMedium" /> 

        <TextView 
         android:id="@+id/messageTextView" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:text="Error Message" 
         android:minWidth="300sp" 
         android:paddingTop="10dp" 
         android:textColor="@android:color/black" 
         android:textAppearance="?android:attr/textAppearanceSmall"/> 

       </LinearLayout> 


       </LinearLayout> 

       </RelativeLayout> 

は今、これらのファイルの中にある景色のテキストサイズや幅と高さを変更することにより、レイアウト・小型、レイアウト、通常、レイアウトXLARGEのための2つのXMLファイルの上に作ります。

**赤い障害レイアウト

NexoolCustomToast.makeText(mContext, "Fail", "Fail Message", false).show(); 

    //OR 

    NexoolCustomToast.makeText(mContext, "Fail", "Fail Message").show(); 
について緑の成功のレイアウト

NexoolCustomToast.makeText(mContext, "Success", "Success Message", true).show(); 

について**

を使用する方法

Custom Toast

+0

私はondraw..isを使用したいと思います私はそれをすることができますか? – Jim

+0

はい、トーストのような構造ではなく、CustomViewを作成するためにonDrawを使用することができます。 Androidトーストは、あなたがonDrawを使用したい場合に、そのロジックを開発しなければならない場合、時間インスタンスのメッセージをトーストするという利点を提供します。 – Abhishek

0

Common.javaファイルに共通のメソッドを作成します。

public static void displayCustomToast(Activity activity, String message, String length) { 

    // if you want to set typeface for toast text then use this // 
    Typeface tfShruti = Typeface.createFromAsset(activity.getAssets(), "fonts/shruti.ttf"); 

    LayoutInflater inflater = activity.getLayoutInflater(); 

    View layout = inflater.inflate(R.layout.custom_layout, 
      (ViewGroup) activity.findViewById(R.id.custom_toast_layout_id)); 
    // set a message 
    TextView text = (TextView) layout.findViewById(R.id.tv_toast); 
    text.setText(message); 
    text.setTypeface(tfShruti); 

    // Toast... 
    Toast toast = new Toast(activity.getApplicationContext()); 
    toast.setGravity(Gravity.BOTTOM, 0, 0); 
    //toast.setMargin(0,10); 
    //toast.setGravity(Gravity.TOP | Gravity.LEFT, 40, 60); 
    //toast.setDuration(Toast.LENGTH_LONG); 

    if (length.equalsIgnoreCase("short")) { 
     toast.setDuration(Toast.LENGTH_SHORT); 
    } else { 
     toast.setDuration(Toast.LENGTH_LONG); 
    } 
    toast.setView(layout); 
    toast.show(); 
} 

このようなレイアウトを作成します。

custom_layout.xml

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/custom_toast_layout_id" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="20dp" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="5dp" 
    android:background="@drawable/rectangle_fill_black_color" 
    android:orientation="vertical" 
    android:padding="5dp"> 

    <TextView 
     android:id="@+id/tv_toast" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hello" 
     android:textColor="#ffffff" 
     android:textSize="17sp" /> 


</LinearLayout> 

次に、このようなプロジェクトではどこでも、このメソッドを使用します。

Common.displayCustomToast(activity, message, "long"); 

または

Common.displayCustomToast(activity, context.getResources().getString(R.string.please_check_internet), "short"); 
関連する問題