我有一个固定大小的自定义视图,如下所示。
public class RateAppBanner extends LinearLayout {
public RateAppBanner(Context context) {
super(context);
LayoutInflater.from(context).inflate(R.layout.rate_app_banner, this, true);
this.setBackgroundColor(Color.RED);
View view = this.findViewById(R.id.textView1);
if (view == null) {
Log.i("CHEOK", "WTF!");
} else {
// Reach here!
Log.i("CHEOK", "---> " + ((TextView)view).getText());
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int w = 320;
int h = 100;
setMeasuredDimension(w, h);
}
}
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="#ffff0000"
android:text="Hello World" />
</merge>
但是,我意识到textView1
在屏幕上不可见,即使我认为我可以通过findViewById
找到它。
我通过Eclipse使用dump View Hierarchy。这就是我得到的。
这让我很困惑。我在视图层次结构中看不到textView1
,即使我可以通过findViewById
发现它。你知道为什么屏幕上看不到textView1
吗?
这是我将RateAppBanner
添加到我的主要活动中的方式。
import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout mainView = (LinearLayout)this.findViewById(R.id.screen_main);
mainView.addView(new RateAppBanner(this));
}
}
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/screen_main">
</LinearLayout>
</FrameLayout>
可以从abc.zip
下载使用Eclipse编译的完整可行的源代码 p / s rate_app_banner.xml
中显示的代码示例是复杂UI布局的精简版本。为了缩小问题范围,我将布局文件仅包含单个TextView
。
我没有使用merge
,而是尝试了
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="#ffff0000"
android:text="Hello World" />
</LinearLayout>
它仍然不起作用......
答案 0 :(得分:1)
我使用你的源abc.zip测试过。请将文本视图的红色更改为其他。然后加 onMeasure(w,h);
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int w = 320; int h = 200; super.onMeasure(w, h); setMeasuredDimension(w, h); }