如何在显示之前获得Android Toast高度

时间:2014-08-31 00:11:19

标签: android android-toast

我一直试图获得自定义吐司的高度,以便我可以使用此代码在按钮的右上角显示吐司:

import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

public class MyToast {

    public static void showToast(Context context, View v, String s) {

        int pos[] = new int[2];
        v.getLocationOnScreen(pos);

        LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
        View layout = inflater.inflate(R.layout.toast_style, (ViewGroup) v.findViewById(R.id.toast_layout_root));

        TextView text = (TextView) layout.findViewById(R.id.toast_text);
        text.setText(s);

        Toast toast = new Toast(context);
        toast.setGravity(Gravity.TOP|Gravity.LEFT, pos[0] + v.getWidth(), pos[1] - v.getHeight());
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setView(layout);
        toast.show();
    }
}

我通过了按钮的视图,所以我可以获得我想要放置吐司的位置,但是v.getHeight()不是完成此任务所需的高度,任何建议?

这是xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toast_layout_root"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="8dp"
    android:background="@drawable/frame_outline" >

    <TextView
        android:id="@+id/toast_text"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:textStyle="italic"
        android:textSize="12sp"
        android:typeface="serif"
        android:gravity="center"
        android:textColor="@color/holo_text" />

</LinearLayout>

1 个答案:

答案 0 :(得分:1)

您可以使用ViewTreeObserver获取textView的高度,而无需通过调用其getViewTreeObserver方法在屏幕中显示,并获得{{1} onGlobalLayout方法内的高度}}

<强>样品:

ViewTreeObserver

编辑:

您需要使用textView

的post方法同步记录高度
final TextView text = (TextView) layout.findViewById(R.id.toast_text);
          text.setText(s);
          final ViewTreeObserver observer= text.getViewTreeObserver();
           observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                 Log.d("Hieght", ""+text.getHeight());   
                }
            });
         Toast