2

カスタムトーストレイアウトを使用すると、これらすべてを簡単に実行できることはわかっていますが、カスタムレイアウトを作成する際に、システムのデフォルトのトーストビューを使用しなくなります。

例:もちろん、トーストはAndroid2.2とAndroid4.0では異なって見えます。トーストのカスタムビューを作成すると、両方のバージョンでまったく同じように見えますが、より良い言葉がないため、「Androidらしさ」を維持することが必要です。基本的に、デフォルトのトーストXMLレイアウトを知っている人はいますか?それも可能ですか?

4

3 に答える 3

6

これは、によって使用されるデフォルトのレイアウトですToasts

transient_notification

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/toast_frame">

<TextView
    android:id="@android:id/message"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:textAppearance="@style/TextAppearance.Small"
    android:textColor="@color/bright_foreground_dark"
    android:shadowColor="#BB000000"
    android:shadowRadius="2.75"/>
</LinearLayout>

これらは、開始と終了のアニメーションです

入力

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@interpolator/decelerate_quad"
        android:fromAlpha="0.0" android:toAlpha="1.0"
        android:duration="@android:integer/config_longAnimTime" />

出口

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@interpolator/accelerate_quad" 
        android:fromAlpha="1.0" android:toAlpha="0.0"
        android:duration="@android:integer/config_longAnimTime" />

toast_frame_holo.9は、バックグラウンドに使用されるリソースの名前です。SDKを検索して、すべてのサイズを見つけます。

そして、ここに完全なソースがありますToasts

そのいずれかがわからない場合は、SDKですべてのリソースを検索してください。ここで私が調べました。

于 2012-05-03T00:54:17.830 に答える
0

最近、ICSデバイスで、接続が失われたためにメッセージの送信に失敗しました。トーストのように見えましたが、フォントサイズが異なり、2行の長さで、赤い境界線がありました。基本的にメッセージの送信に失敗した(または接続エラー)と言っていました。

それはあなたが探しているものに似ているかもしれませんか?

于 2012-05-03T04:33:55.547 に答える
0

デフォルトのトーストも保持したかったのですが、すべてのシステムに対して単一のトーストレイアウトを作成する方法を示す解決策を見つけました。そこで、このヘルパーを作成しました。私は知っています、それはハックですが、それは私にとってはうまくいきます。

ここでは、テキストの前のトーストに、本来の外観に触れることなく画像を追加しました。ここでテキストの色とサイズを簡単に変更できます。

多分誰かがこのコードスニペットに興味があるかもしれません...

private static Toast makeImageToast(int imageResId, CharSequence text, int duration) {
    Toast toast = Toast.makeText(mContext, text, duration);

    View rootView = toast.getView();
    LinearLayout linearLayout = null;
    TextView messageTextView = null;

    // check (expected) toast layout
    if (rootView instanceof LinearLayout) {
        linearLayout = (LinearLayout) rootView;

        if (linearLayout.getChildCount() == 1) {
            View child = linearLayout.getChildAt(0);

            if (child instanceof TextView) {
                messageTextView = (TextView) child;
            }
        }
    }

    // cancel modification because toast layout is not what we expected
    if (linearLayout == null || messageTextView == null) {
        // failed to create image toast layout, using usual toast
        return toast;
    }

    ViewGroup.LayoutParams textParams = messageTextView.getLayoutParams();
    ((LinearLayout.LayoutParams) textParams).gravity = Gravity.CENTER_VERTICAL;

    // convert dip dimension
    int imageSize = dipToPixel(25);
    int imageMargin = dipToPixel(15);

    // setup image view layout parameters
    LinearLayout.LayoutParams imageParams = new LinearLayout.LayoutParams(imageSize, imageSize);
    imageParams.setMargins(0, 0, imageMargin, 0);
    imageParams.gravity = Gravity.CENTER_VERTICAL;

    // setup image view
    ImageView imageView = new ImageView(mContext);
    imageView.setId(TOAST_IMAGE_ID);
    imageView.setImageResource(imageResId);
    imageView.setLayoutParams(imageParams);

    // modify root layout
    linearLayout.setOrientation(LinearLayout.HORIZONTAL);
    linearLayout.addView(imageView, 0);

    return toast;
}

public static int dipToPixel(float dip) {
    return (int) (dip * mContext.getResources().getDisplayMetrics().density + 0.5f);
}
于 2012-05-09T21:59:36.080 に答える