我有一个包含以下内容的android XML文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relLay"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/ivQuit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/imgquit"
android:background="@null"
android:adjustViewBounds="true"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/btnYes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/btnyes"
android:background="@null"
android:adjustViewBounds="true"
android:scaleType="fitXY"/>
<ImageButton
android:id="@+id/btnNo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/btnno"
android:background="@null"
android:adjustViewBounds="true"
android:scaleType="fitXY"/>
</RelativeLayout>
现在我想给它充气,然后通过代码编辑ImageButtons。我按照以下方式执行此操作:
膨胀XML:
LayoutInflater inflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.quitgame, null);
尝试编辑ImageButton:
ImageView imgView = (ImageView)findViewById(R.id.ivQuit);
ImageButton imgBtnYes = (ImageButton)findViewById(R.id.btnYes);
ImageButton imgBtnNo = (ImageButton)findViewById(R.id.btnNo);
RelativeLayout.LayoutParams relParams = (RelativeLayout.LayoutParams)imgBtnYes.getLayoutParams();
relParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
imgBtnYes.setLayoutParams(relParams);
然而,只要存在具有LayoutParams的三个代码行,就不会出现我使用膨胀视图创建的PopupWindow。似乎错误隐藏在这一行
中 RelativeLayout.LayoutParams relParams = (RelativeLayout.LayoutParams)imgBtnYes.getLayoutParams();
但我不明白为什么。
有人可以告诉我为什么PopupWindows因为这个代码行没有出现? 是因为PopupWindow本身还是因为LayoutInflater?
答案 0 :(得分:1)
你有这个
LayoutInflater inflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.quitgame, null);
使用View对象初始化视图。
ImageView imgView = (ImageView)layout.findViewById(R.id.ivQuit);
ImageButton imgBtnYes = (ImageButton)layout.findViewById(R.id.btnYes);
ImageButton imgBtnNo = (ImageButton)layout.findViewById(R.id.btnNo);
您可以findViewById
将当前视图层次设置为活动。在您的情况下,您正在夸大您的布局。因此,使用inlfated视图对象初始化视图。
答案 1 :(得分:0)
您正在使用root设置为null来布局布局,因此您的布局变量(由inflate方法返回)保存了膨胀布局的根(在本例中为RelativeLayout)。我没有看到您将膨胀的布局附加到您的活动内容的代码(可能您发布的代码不完整?)。 鉴于此,您的findViewById调用应返回null。 而且,据我所知和理解,除非视图附加到已经在活动中某处的视图,否则LayoutParams将不会正确,因为没有设置任何维度(即使它们是在视图上调用的显然不是空的。