0

想知道以前是否有人遇到过这个问题。我有一个应用程序可以检测人脸并在人脸周围放置可触摸的方块,所有这些都在一个相对布局中。当被触摸时,我想在视图中添加一些文本,这一切都很好,但是当我去简单地向 TextView 添加背景时,它什么也不做。我尝试了标准背景setBackgroundColor(Color.WHITE);而不是我真正想使用的背景(setBackgroundResource(R.drawable.nametag);),但仍然没有。

TextView nameLabelView = new TextView(activity);
nameLabelView.setText(fullname);
nameLabelView.setTextColor(Color.BLACK);
nameLabelView.setBackgroundColor(Color.WHITE);                 //TODO <-- wth??
//nameLabelView.setBackgroundResource(R.drawable.nametag);
nameLabelView.setGravity(Gravity.CENTER_HORIZONTAL);

//duplicate layout params from active face View so label sits inside it
ViewGroup.LayoutParams lp = selectedFaceView.getLayoutParams();
nameLabelView.setLayoutParams(lp);
facePreviewLayout.addView(nameLabelView);

奇怪的一个,希望对那里的人来说很明显,在此先感谢!

4

2 回答 2

1

我已经测试了你的代码,它对我来说没问题。有必要提供更多信息,以便我可以提供更多帮助。下面的代码工作正常。

MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView nameLabelView = new TextView(getApplicationContext());
        nameLabelView.setText("Test");
        nameLabelView.setTextColor(Color.WHITE);
        nameLabelView.setBackgroundColor(Color.BLACK);                 //TODO <-- wth??
        //nameLabelView.setBackgroundResource(R.drawable.nametag);
        nameLabelView.setGravity(Gravity.CENTER_HORIZONTAL);

        //duplicate layout params from active face View so label sits inside it
        FrameLayout selectedFaceView = (FrameLayout)findViewById(R.id.frame_layout);
        ViewGroup.LayoutParams lp = selectedFaceView.getLayoutParams();
        nameLabelView.setLayoutParams(lp);
        RelativeLayout facePreviewLayout = (RelativeLayout)findViewById(R.id.relative_layout);
        facePreviewLayout.addView(nameLabelView);

    }

}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/relative_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/frame_layout"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="#00FF00" >
    </FrameLayout>

</RelativeLayout>
于 2014-05-07T10:25:43.757 回答
0

谢谢你janzoner的测试真的很感激,很高兴知道我没有生气。我找到了解决它的方法,但我不知道为什么这种方法有效,而我之前的设置却没有,也许我一直盯着它太久而错过了其他地方的东西。

基本上事先我将名称标签添加TextView到主要RelativeLayout(其孩子是实际图像和所有的脸Views等)。

现在我已经将名称标签TextView移到了它自己的RelativeLayout位置,它位于脸部周围,这就是神奇的伎俩。无论如何,这是一种更清洁的做事方式,因为您不能遍历 child ViewsofViews但您可以遍历RelativeLayout's 的孩子,我稍后会需要它!

呸!

于 2014-05-07T10:52:34.817 回答