安卓开发,自定义LinearLayout,通过addView方法添加TextView,无法显示,但是添加Button却能显示,这是为什么?

XEZBZ 2017-12-18 10:31:11
自己定义了一个空间,继承了LinearLayout,在空间的构造方法中new了一个TextView,
通过addView添加TextView,但是不显示,试了new一个Button,也在构造方法中addView
添加这个button,却能显示出来,请问这是为什么,菜鸟一枚,请各位大神赐教
这是自定义的LinearLayout代码:
public class LoopView extends LinearLayout {
public LoopView(Context context){
super(context);
}
public LoopView(Context context, AttributeSet attributeSet){
super(context,attributeSet);
TextView textView = new TextView(context);
textView.setText("this is title");
textView.setTextColor(Color.RED);
textView.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
textView.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP,17);

this.addView(textView);//没法显示出来
/*如果添加的是一个Button,就能正常的显示出来*/
/*Button btn = new Button(context);
btn.setText("this is btn");
this.addView(btn);*/
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
线面是布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.lyz.viewpage.activity.LoopView
android:layout_width="match_parent"
android:layout_height="match_parent"
></com.lyz.viewpage.activity.LoopView>
</LinearLayout>
求各位大神赐教啊
...全文
1650 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lykAnd 2017-12-20
  • 打赏
  • 举报
回复
2楼思路是对的。 textView.setWidth(WindowManager.LayoutParams.WRAP_CONTENT); textView.setHeight(WindowManager.LayoutParams.WRAP_CONTENT); 这两个方法是通过传入实际的数值来设置TextView的宽高,你这里传入的参数值为-2,这样TextView的宽高都是-2,当然无法显示了。 你可以把这两句删掉,或者传入一个大于0的正整数(比如100)试试。
XEZBZ 2017-12-20
  • 打赏
  • 举报
回复
引用 4 楼 lyklykkk 的回复:
2楼思路是对的。 textView.setWidth(WindowManager.LayoutParams.WRAP_CONTENT); textView.setHeight(WindowManager.LayoutParams.WRAP_CONTENT); 这两个方法是通过传入实际的数值来设置TextView的宽高,你这里传入的参数值为-2,这样TextView的宽高都是-2,当然无法显示了。 你可以把这两句删掉,或者传入一个大于0的正整数(比如100)试试。
谢谢大神
XEZBZ 2017-12-20
  • 打赏
  • 举报
回复
引用 2 楼 jklwan 的回复:
Button默认有样式,可以显示。你的textview看看设置错了
        
textView.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
textView.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
把这两句删掉,setWidth,setHeight可不是设置宽高,是设置最大宽高,你给设置成-2了。设置宽高用setLayoutParams
确实是这样的,多谢大神指点
jklwan 2017-12-19
  • 打赏
  • 举报
回复
Button默认有样式,可以显示。你的textview看看设置错了
        
textView.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
textView.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
把这两句删掉,setWidth,setHeight可不是设置宽高,是设置最大宽高,你给设置成-2了。设置宽高用setLayoutParams
雨焰 2017-12-19
  • 打赏
  • 举报
回复
你的linearlayout没有设置方向,你的button把你的textview给覆盖到下面去了
XEZBZ 2017-12-19
  • 打赏
  • 举报
回复
引用 1 楼 f839903061 的回复:
你的linearlayout没有设置方向,你的button把你的textview给覆盖到下面去了
不是这样的哦,我是单独添加button是能显示button,但是单独添加textView时就不能显示textView,不是两个同时添加的
目录介绍01.该库介绍02.效果展示03.如何使用04.注意要点05.优化问题06.部分代码逻辑01.该库介绍自定义红点控件,不用修改之前的代码,完全解耦,既可以设置红点数字控件,使用十分方便。网上看到有些案例是继承View,然后去测量和绘制红点的相关操作,此案例则不需要这样,继承TextView也可以完成设置红点功能。可以支持设置在TextViewButtonLinearLayout,RelativeLayout,TabLayout等等控件上……大概的原理是:继承TextView,然后设置LayoutParams,设置内容,设置Background等等属性,然后在通过addView添加到父控件中。02.效果展示03.如何使用如何引用implementation 'cn.yc:YCRedDotViewLib:1.0.3'如下所示//创建红点View YCRedDotView ycRedDotView = new YCRedDotView(this); //设置依附的View ycRedDotView.setTargetView(tv1); //设置红点的数字 ycRedDotView.setBadgeCount(10); //设置红点位置 ycRedDotView.setRedHotViewGravity(Gravity.END); //获取小红点的数量 int count = ycRedDotView.getBadgeCount(); //如果是设置小红点,不设置数字,则可以用这个,设置属性是直径 ycRedDotView.setBadgeView(10); //设置margin ycRedDotView.setBadgeMargin(0,10,20,0);04.注意要点如果设置数字大于99,则会显示“99 ”。如果设置为0,则不可见。05.优化问题相比网上一些案例,该库不需要做测量绘制方面操作,代码十分简洁,但却也可以完成你需要的功能。有些红点View,需要你在布局中设置,要是很多地方有设置红点操作,则比较麻烦。而该案例不需要改变你之前的任何代码,只是需要按照步骤即可设置红点。设置红点view到你的控件的逻辑操作代码如下所示。如果控件父布局是帧布局,则直接添加;如果控件父布局是ViewGroup,则创建一个帧布局,然后添加红点/**  * 设置红点依附的view  * @param view                  view  */ public void setTargetView(View view){     if (getParent() != null) {         ((ViewGroup) getParent()).removeView(this);     }     if (view == null) {         return;     }     if(view.getParent() instanceof FrameLayout){         ((FrameLayout) view.getParent()).addView(this);     }else if(view.getParent() instanceof ViewGroup){         ViewGroup parentContainer = (ViewGroup) view.getParent();         int groupIndex = parentContainer.indexOfChild(view);         parentContainer.removeView(view);         FrameLayout badgeContainer = new FrameLayout(getContext());         ViewGroup.LayoutParams parentLayoutParams = view.getLayoutParams();         badgeContainer.setLayoutParams(parentLayoutParams);         view.setLayoutParams(new ViewGroup.LayoutParams(                 ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));         parentContainer.addView(badgeContainer, groupIndex, parentLayoutParams);         badgeContainer.addView(view);         badgeContainer.addView(this);     }else {         Log.e(getClass().getSimpleName(), "ParentView is must needed");     } }
实验2、Android 应用的界面开发(1) 1. 实验目的 1、掌握Android应用结构组成 2、了解控制UI界面的三种方式 3、掌握XML界面控制的设计方法 4、掌握常用界面组件TextView、EditText、Button 2. 实验步骤 1. 掌握Android应用结构组成(导入工程phone) 2. 了解UI界面(Java程序代码创建)(导入工程login1) package cn.sise.login; import android.app.Activity; import android.os.Bundle; import android.text.InputType; import android.view.Gravity; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; public class LoginActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.main); LinearLayout layout= new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); TextView txtusername= new TextView(this); txtusername.setText("用户名"); EditText username=new EditText(this); TextView txtpassword= new TextView(this); txtpassword.setText("密码"); EditText password=new EditText(this); password.setInputType(InputType.TYPE_CLASS_TEXT " InputType.TYPE_TEXT_VARIATION_PASSWORD); Button login =new Button(this); login.setText("登录"); Button reset =new Button(this); reset.setText("重置"); layout.addView(txtusername); layout.addView(username); layout.addView(txtpassword); layout.addView(password); setContentView(layout); layout.addView(login); layout.addView(reset); } } 3.掌握XML界面控制的设计方法和常用界面组件TextView、EditText、Button 参考代码: 在layout/activity_main.xml中增加如下代码 在src/MainActivity.java中增加如下代码 4、课后提高题 :XML布局文件和Java代码混合控制UI界面(点击"add"按钮动态增加"电话号码"控件) ----------------------- 实验2-Android-应用的界面开发(1)全文共7页,当前为第1页。 实验2-Android-应用的界面开发(1)全文共7页,当前为第2页。 实验2-Android-应用的界面开发(1)全文共7页,当前为第3页。 实验2-Android-应用的界面开发(1)全文共7页,当前为第4页。 实验2-Android-应用的界面开发(1)全文共7页,当前为第5页。 实验2-Android-应用的界面开发(1)全文共7页,当前为第6页。 实验2-Android-应用的界面开发(1)全文共7页,当前为第7页。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧