我一直试图获得自定义吐司的高度,以便我可以使用此代码在按钮的右上角显示吐司:
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>
答案 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