2 qq 33230445 qq_33230445 于 2016.04.05 15:32 提问

Android addview自定义控件不显示问题

为什么我在onCreat中addview一个自定义控件能够正常显示,但是在onWindowsFoucsChanged里面addview总是显示不出来

12个回答

lxk_1993
lxk_1993   Rxr 2016.04.06 19:18
已采纳

你可以在oncreate 中 添加 然后再 onWindowFocusChanged 中设置 宽高

qq_33230445
qq_33230445 头都大了,感觉这样不行啊
2 年多之前 回复
qq_33230445
qq_33230445 我这是画得一个圆,是有画得过程的那种,实例化的后面那3个参数分别是圆心X坐标,圆心Y坐标,半径,半径也不是固定的,一直在变化,我只是随便写了一个,必须得先实例化,才能添加啊,宽高什么的我这还能怎么设?
2 年多之前 回复
qq519934599
qq519934599   2016.04.05 15:34

把进去的view,addview之前,先用view.measure(0,0)测量一下,再加进去

qq_33230445
qq_33230445 我试了,没效果啊
2 年多之前 回复
qq_27564553
qq_27564553   2016.04.05 15:48

把代码贴出来看看,onWindowsFoucsChanged是你自己定义的方法吧,你有没有调用了呢?没有调用肯定是不显示的,onCreate()在创建活动是时候自动调用,详细看activity的生命周期

qq_33230445
qq_33230445 代码看下面,两种都贴出来的,onWindowsFoucsChanged并不是自己定义的
2 年多之前 回复
CSDNXIAOD
CSDNXIAOD   2016.04.05 15:59

Android自定义控件-AddView
用户自定义控件 界面 不显示问题
自定义控件在sumsung手机上第一次显示 第二次 不显示子控件的问题解决
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

qq519934599
qq519934599   2016.04.05 15:33

把进去的view,addview之前,先用view.merits(0,0)测量一下,再加进去

qq_33230445
qq_33230445   2016.04.05 16:08

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

    setContentView(R.layout.activity_main);
    Circleview av = new Circleview(this, 360, 468, 150);
    mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    cl = (LinearLayout) findViewById(R.id.cl);
    cl.addView(av);
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    cl = (LinearLayout) findViewById(R.id.cl);
    w = cl.getWidth() / 2;
    h = cl.getTop() + cl.getHeight() / 2;
    av = new Circleview(this, w, h, 150);
    cl.addView(av);
    super.onWindowFocusChanged(hasFocus);
}

qq_33230445
qq_33230445   2016.04.05 16:08

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

    setContentView(R.layout.activity_main);
    Circleview av = new Circleview(this, 360, 468, 150);
    mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    cl = (LinearLayout) findViewById(R.id.cl);
    cl.addView(av);
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
cl = (LinearLayout) findViewById(R.id.cl);
w = cl.getWidth() / 2;
h = cl.getTop() + cl.getHeight() / 2;
av = new Circleview(this, w, h, 150);
cl.addView(av);
super.onWindowFocusChanged(hasFocus);
}

qq_27564553
qq_27564553   2016.04.05 16:23

代码看起来没有问题,你知道什么时候触发这个方法吗?

qq_33230445
qq_33230445 回复CrawlWu: onCreate先执行,我是方便你看才写成这样的,用onCreate的时候就没用重写onWindowFocusChanged,但是你也看出来了,我是画得个圆,要根据父组件的宽高来确定圆心坐标,所以要用onWindowFocusChanged测才行
2 年多之前 回复
qq_27564553
qq_27564553 回复qq_33230445: 你说的得到焦点并不是你点了之后知道吗,是自动获得的,所以让你打个断点
2 年多之前 回复
qq_27564553
qq_27564553 修改你半径试试,或者在oncreate中先不画
2 年多之前 回复
qq_27564553
qq_27564553 回复qq_33230445: 我看到是你onCreate中定义了Circleview av这个局域变量,不知道你这连个函数是不是同时实现的。猜想是不是你最终的结果就是onWindowFocusChanged之后的结果,在这里打个断点
2 年多之前 回复
qq_33230445
qq_33230445 回复CrawlWu: 还没画出来啊,都还没有你测什么。。
2 年多之前 回复
qq_27564553
qq_27564553 回复qq_33230445: 那你知道为什么onCreate中不好获得组件的宽和高呢?
2 年多之前 回复
qq_33230445
qq_33230445 onCreare里面不好获得组件的宽高,这个方法就是在组件绘制完成之后,当前activity得到焦点的时候调用的
2 年多之前 回复
sl_18500
sl_18500   2016.04.05 16:46

因为从onWindowFocusChanged被执行起,用户可以与应用进行交互 ,是真正visible的时间点,已经加载完毕

qq_33230445
qq_33230445 回复sl_18500: 可是有什么方法可以再之前得到组件的宽高呢,我在网上查了多种方法,虽然代码写下onCreate里的,但都是在onResume方法之后才得到的,跟onWindowFocusChanged查不多
2 年多之前 回复
sl_18500
sl_18500 是的
2 年多之前 回复
qq_33230445
qq_33230445 就是说必须在onWindowFocusChanged执行之前addview才行?
2 年多之前 回复
bingaicao1
bingaicao1   2016.04.05 18:01

你添加进去了,但是没有告诉显示多大,再设置一个布局参数进去吧。

qq_33230445
qq_33230445 不是吧,刚开始没有,但是熄屏再点亮屏幕就正常了
2 年多之前 回复
共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
addview的view何时显示的问题
我的项目是一个在任何时候都可以弹出的待机界面,界面是一张图和一个倒计时提示。 我的界面是通过在activty中通过WindowManager.addview上去的。因为addview的window可以控制view显示在最上层,而单纯的activity界面不可以,会被遮挡。 因为activity真正visible的时候,是会回调onWindowFocusChanged这个方法,所以为了避免每个平
Android自定义控件-AddView
package view;import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.gr
addView() 无法显示的问题
在制作一个2048的时候我需要在一个GridLayout中加入2048的中数字的卡片,于是建立了一个方法 //向布局中加入卡片 private void addCards(int cardWidth,int cardHeight) { Card card; for(int i = 0;i 4;i++) { for (int j = 0; j 4; j++) {
android之addView解析
在android中,addView(ViewGroup view, index)在指定的index处添加一个view。这种方式有一个限制,就是我们无法再任意位置添加view.我们只能顺序添加。如果我们的需求要求按照一定的顺序进行添加时,我们只能先对各项进行排序,然后在一项一项的添加。 addView(ViewGroup view)相当于按随性逐个添加。
Android7.0 自定义控件addView(...)无效,View的绘制流程(onMeasure、onLayout等)完全没执行的解决办法。
问题描述昨天在写一个自定义控件的时候遇到一个问题,就是我通过addView(View child) 方法添加View之后再7.0上没有显示出来,6.0上没有问题。通过AS自带的Layout Inspector工具检查发现我的自定义控件的宽高都是0,并且getVisibility()==VISIBLE,也就是说控件是显示的,只是没有宽高所以看不到。 先看下我addView的代码吧:void setF
addView遇到的坑及其解决
代码中给容器动态添加子View时遇到一些问题,当时还是纠结许久的。擅总结者无敌,写下此篇总结,问题比较的简单,但也包含了成长与反思。
WindowManager addView
首先WindowManager是怎么获取的WindowManager mWindowManager = Context.getSystemService(WindowManager.class);可以通过这种方式给Activity add一个view 接着找到WindowManager和其他两个类的关系public final class WindowManagerImpl implements
ViewGroup的方法addView的使用
一、前导 ViewGroup是View的子类,
addView android
Android 中LinearLayout中addView妙用并添加子项的监听器    以前我只知道ListView中可以动态的加载一些项,慢方便的,格式又固定,又可以随意的显示很多项,但是我在添加的项太多了的时候,我发先不行了,特别是添加图片多的时候,就会卡死了,这样我感到很尴尬,好用的东西怎么这么经不起考研呢,百思不得其解,后来有人说LinearLayout有东东可以研究,我去研究了下,发现
android WindowManager addView Demo
public class WindowManagerActivity extends Activity implements OnTouchListener{          private Button mFloatingButton;     private WindowManager.LayoutParams mLayoutParams;     private WindowMan