即使没有代码错误,编辑文本也不会显示在我的设备上

时间:2018-07-14 21:25:16

标签: java android android-studio

如果我能对此有所帮助,我将感到非常高兴,因为我是android上的完整初学者,而在Java tho上则不是很多,因此我基本上遵循youtube上的一些教程。基本上,代码工作正常,没有可见的错误,但是当我运行它时,它不会显示。重要的是要注意,用户界面是使用Java设计的,而不是基于XML的。

代码:

    import android.annotation.SuppressLint;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.RelativeLayout;
import android.widget.Button;
import android.graphics.Color;
import android.widget.EditText;
import android.content.res.Resources;
import android.util.TypedValue;

public class MainActivity extends AppCompatActivity {

    @SuppressLint("ResourceType")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Button btn = new Button(this);
        EditText username = new EditText(this);
        btn.setId(1);
        username.setId(2);


        RelativeLayout alayout = new RelativeLayout(this);


        RelativeLayout.LayoutParams drawBtn = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        drawBtn.addRule(RelativeLayout.CENTER_HORIZONTAL);
        drawBtn.addRule(RelativeLayout.CENTER_VERTICAL);

        RelativeLayout.LayoutParams drawUsername;
        drawUsername = new RelativeLayout.LayoutParams(
            RelativeLayout.CENTER_HORIZONTAL,
            RelativeLayout.CENTER_VERTICAL
        );
        drawUsername.addRule(RelativeLayout.ABOVE, btn.getId());
        drawUsername.addRule(RelativeLayout.CENTER_HORIZONTAL);

        drawUsername.setMargins(0,0,0, 15);

        btn.setText("Entrar");
        btn.setBackgroundColor(Color.RED);
        alayout.setBackgroundColor(Color.GREEN);
        btn.setBackgroundColor(Color.MAGENTA);

        Resources r = getResources();
        int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, r.getDisplayMetrics());

        username.setWidth(px);
        alayout.addView(btn, drawBtn);
        alayout.addView(username, drawUsername);
        setContentView(alayout);
    }
}

此外,我的btn实际上正在显示,令我着迷的是为什么我的用户名EditText没有显示,请帮忙

2 个答案:

答案 0 :(得分:0)

更改为-

drawUsername = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT,
           RelativeLayout.LayoutParams.WRAP_CONTENT
        );

为什么? -CENTER_HORIZONTALCENTER_VERTICAL是规则,您需要至少设置一些要绘制的宽度和高度。那就是您为按钮所做的,但您没有为edittext做

答案 1 :(得分:0)

发生了什么事,是由于您的抽屉用户名使用了RelativeLayout.LayoutParams。

如果您查看已创建的RelativeLayout.LayoutParams:

fadeOut()

注意区别吗? LayoutParams构造函数采用int值:

  • MATCH_PARENT = -1

  • WRAP_CONTENT = -2

  • 任何其他int值

如果它是-1或-2,则构造函数将执行特殊操作,但如果它是任何其他整数值,则将宽度和高度的大小简单地设置为该大小即可。

如果您查看由CENTER_HORIZONTAL和CENTER_VERTICAL表示的int值,您会看到它是14和15的值。因此,LayoutParams构造函数将看到该值,并简单地创建大小为14和15的视图,即太小而看不见。

解决方法是用WRAP_CONTENT替换drawUsername LayoutParams构造函数。