Как получить светло-голубой ореол тоста в моем обычном тосте? - PullRequest
4 голосов
/ 28 ноября 2011

Я создаю свой собственный тост в основном потому, что размещаю его в виде сетки и нуждаюсь в некотором контроле его ширины. Но мне действительно нравится светло-голубой ореол на стандартном тосте, и я хотел бы получить его обратно (или, по крайней мере, мой собственный тост будет выглядеть несколько похожим на тост по умолчанию).

Какой простой / элегантный способ добиться этого?

Я создал собственный тост из этого макета:

    <LinearLayout 
        android:id="@+id/toast_layout_root"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" android:padding="10dp">
        <ImageView android:id="@+id/toast_layout_image" 
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:src="@drawable/icon" android:layout_marginRight="10dp">
        </ImageView>
        <TextView android:layout_width="wrap_content" 
            android:layout_height="wrap_content" android:id="@+id/toast_layout_text"           
            android:textColor="#FFF" android:textAppearance="?android:attr/textAppearanceLarge">
        </TextView>
    </LinearLayout>

и вызывайте его таким образом (общий подход, описанный в документации по android dev., А также пару учебных пособий в Интернете, единственное отличие состоит в том, что я работаю с видом сетки, и каждый тост размещается в соответствии с его плиткой сетки должность):

int location[] = new int[2];
view.getLocationOnScreen(location);
LayoutInflater inflater = getLayoutInflater();
View toastLayout = inflater.inflate(R.layout.toast_layout,(ViewGroup)findViewById(R.id.toast_layout_root));
TextView textView = (TextView) toastLayout.findViewById(R.id.toast_layout_text);
textView.setText("This tile does not contain any valid data.");
int toastWidth = cellWidth * 3 / 4;
textView.setWidth(toastWidth - 64);   // TODO picture size needs to be correct

Toast toast = new Toast(getApplicationContext());
toast.setView(toastLayout);
toast.setDuration(Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP|Gravity.LEFT, location[0]+((cellWidth-toastWidth)/2),location[1]+cellHeight-100);              
toast.show();

Это выглядит очень чисто, но совершенно не похоже на тост по умолчанию.

1 Ответ

4 голосов
/ 28 ноября 2011

примените этот макет для вашего тостового сообщения:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/toast_layout_root"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:padding="35dp"
        android:orientation="horizontal" 
        android:background="@android:drawable/dialog_holo_dark_frame" >
        <ImageView android:id="@+id/toast_layout_image" 
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:src="@drawable/appicon" android:layout_marginRight="10dp">
        </ImageView>
        <TextView android:layout_width="wrap_content" 
            android:layout_height="wrap_content" android:id="@+id/toast_layout_text"           
            android:textColor="#FFF" android:textAppearance="?android:attr/textAppearanceLarge">
        </TextView>
    </LinearLayout>

Я не нашел, что такое cellWidth и cellHeight, поэтому попробуйте поэкспериментировать с отступом, если он не подходит Редактировать: О, я применил темную тему, попробуйте вместо этого использовать свет.

...