android 将自定义组件添加到xml后,程序崩溃

activity_main中的代码是这样的
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/root">

android:layout_width="match_parent"
android:layout_height="match_parent" />

包名就是com.example.followfinger,
请问,这个自定义组件是否与Activity一样需要在AndroidMainfest.xml中声明吗?
如果是,应该怎么写?
初学者,麻烦大家了

8个回答

自定义控件不需要在AndroidMainfest.xml声明
一般是这样声明就可以
android:layout_width="match_parent"
android:layout_height="match_parent">

com.example.followfinger
android:layout_width="match_parent"
android:layout_height="match_parent">
com.example.followfinger/>

Ricecongee
Ricecongee @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* //获取布局文件中的LinearLayout容器 LinearLayout main = (LinearLayout)this.findViewById(R.id.root); //创建DrawView组件 final DrawView draw = new DrawView(this); //设置组件的最小宽度和高度 draw.setMinimumHeight(500); draw.setMinimumWidth(300); main.addView(draw); */ }
大约 4 年之前 回复
Ricecongee
Ricecongee 我要是在MainActivity中直接调用 像这样
大约 4 年之前 回复
Ricecongee
Ricecongee 还是不行啊
大约 4 年之前 回复
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    /*
    //获取布局文件中的LinearLayout容器
    LinearLayout main = (LinearLayout)this.findViewById(R.id.root);
     //创建DrawView组件
    final DrawView draw = new DrawView(this);
    //设置组件的最小宽度和高度
    draw.setMinimumHeight(500);
    draw.setMinimumWidth(300);
    main.addView(draw);
   */
}

不去除注释,不在布局文件中添加组件,程序就一点问题没有。
但是我加上注释,在布局文件中那样写之后,程序打开就直接崩溃了

崩溃的原因发上来看看

Ricecongee
Ricecongee 好的 报错在评论区
大约 4 年之前 回复

LinearLayout获取的方式不对,如下代码所示:

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

        //获取contentView,即加载到界面的view
        ViewGroup content = (ViewGroup)findViewById(android.R.id.content);
        //获取你的LinearLayout布局
        LinearLayout main = (LinearLayout) content.getChildAt(0);
        //添加你自定义的View
        TextView textView = new TextView(this);
        textView.setText("hello world");
        main.addView(textView);
    }
huaheshangxo
苍蝇小黑 回复Ricecongee: 自定的的DrawView的问题。
大约 4 年之前 回复
Ricecongee
Ricecongee 还是不行 报错图在下面
大约 4 年之前 回复

04-11 12:35:41.892: W/dalvikvm(2116): threadid=1: thread exiting with uncaught exception (group=0x94d0fb20)
04-11 12:35:41.892: E/AndroidRuntime(2116): FATAL EXCEPTION: main
04-11 12:35:41.892: E/AndroidRuntime(2116): Process: com.example.followfinger, PID: 2116
04-11 12:35:41.892: E/AndroidRuntime(2116): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.followfinger/com.example.followfinger.MainActivity}: android.view.InflateException: Binary XML file line #8: Error inflating class com.example.followfinger.DrawView

你咋不把自定义控件的代码贴出来?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

android自定义view插入xml

自定义View代码如下。我希望把这个view插入到一个layout的xml的文件中。一直出错,错误类型是error inflating class。应该是这个View出的问题 package com.example.browserstation; import java.util.Timer; import java.util.TimerTask; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; public class touchmove extends View{ private int start_x; private final int width = MainActivity.screenWidth; private int height ; private int backwidth; private int ori_x = 0; //点击屏幕原始坐标,当前坐标和位移数据 private int ori_y = 0; private int cur_x = 0; private int cur_y = 0; private int del_x = 0; private int del_y = 0; private Bitmap bmp_back; private Bitmap bmp_bg1; private Bitmap bmp_draw0; private Bitmap bmp_draw1; private Boolean flag_move = false; private Boolean flag_temp = false; private int index = 0; private Context c; private TimerTask ttsk = new TimerTask(){ @Override public void run() { // TODO Auto-generated method stub if(flag_move)h.sendEmptyMessage(0x888); } }; final Handler h = new Handler(){ //处理信息,背景移动 public void handleMessage(Message msg){ if(msg.what == 0x888){ if(start_x < (backwidth - width-2)){ flag_temp = false; start_x += 3; }else if(start_x < backwidth - 3){ start_x += 3; flag_temp = true; }else{ if(index>0){ backwidth = bmp_back.getWidth(); index = 0; }else { backwidth = bmp_bg1.getWidth(); index += 1; } start_x = 0; flag_temp = false; flag_move = false; } } invalidate(); } }; private Timer timer; public touchmove(Context context) { super(context); c = context; bmp_back = BitmapFactory.decodeResource(getResources(), R.drawable.mainback); bmp_back = new zoompicture(bmp_back,bmp_back.getWidth(),MainActivity.screenHeight).getOutbtm(); bmp_bg1 = BitmapFactory.decodeResource(getResources(), R.drawable.bg1); bmp_bg1 = new zoompicture(bmp_bg1,bmp_bg1.getWidth(),MainActivity.screenHeight).getOutbtm(); start_x = 0; backwidth = bmp_back.getWidth(); height = MainActivity.screenHeight; bmp_draw0 = bmp_back; bmp_draw1 = bmp_back; timer = new Timer(); timer.schedule(new TimerTask(){ @Override public void run() { // TODO Auto-generated method stub if(flag_move){ h.sendEmptyMessage(0x888); } } }, 0, 100); } public touchmove(Context context, AttributeSet attrs) { super(context,attrs); // TODO Auto-generated constructor stub c = context; bmp_back = BitmapFactory.decodeResource(getResources(), R.drawable.mainback); bmp_back = new zoompicture(bmp_back,bmp_back.getWidth(),MainActivity.screenHeight).getOutbtm(); bmp_bg1 = BitmapFactory.decodeResource(getResources(), R.drawable.bg1); bmp_bg1 = new zoompicture(bmp_bg1,bmp_bg1.getWidth(),MainActivity.screenHeight).getOutbtm(); start_x = 0; backwidth = bmp_back.getWidth(); height = MainActivity.screenHeight; bmp_draw0 = bmp_back; bmp_draw1 = bmp_back; timer.schedule(new TimerTask(){ @Override public void run() { // TODO Auto-generated method stub if(flag_move){ h.sendEmptyMessage(0x888); } } }, 0, 100); } public touchmove(Context context, AttributeSet attrs, int delStyle) { super(context,attrs,delStyle); // TODO Auto-generated constructor stub c = context; bmp_back = BitmapFactory.decodeResource(getResources(), R.drawable.mainback); bmp_back = new zoompicture(bmp_back,bmp_back.getWidth(),MainActivity.screenHeight).getOutbtm(); bmp_bg1 = BitmapFactory.decodeResource(getResources(), R.drawable.bg1); bmp_bg1 = new zoompicture(bmp_bg1,bmp_bg1.getWidth(),MainActivity.screenHeight).getOutbtm(); start_x = 0; backwidth = bmp_back.getWidth(); height = MainActivity.screenHeight; bmp_draw0 = bmp_back; bmp_draw1 = bmp_back; timer.schedule(new TimerTask(){ @Override public void run() { // TODO Auto-generated method stub if(flag_move){ h.sendEmptyMessage(0x888); } } }, 0, 100); } /* (non-Javadoc) * @see android.view.View#onTouchEvent(android.view.MotionEvent) */ @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); switch(action){ case MotionEvent.ACTION_DOWN:ori_x = (int)event.getX();ori_y = (int)event.getY(); Log.v("ori_x :",""+ori_x); return true; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP:cur_x = (int)event.getX();cur_y = (int)event.getY(); del_x = cur_x - ori_x;del_y = cur_y - ori_y; if(del_x < -50){ flag_move = true; };Log.v("delx: ",""+del_x); break; } // TODO Auto-generated method stub return super.onTouchEvent(event); } /* (non-Javadoc) * @see android.view.View#onDraw(android.graphics.Canvas) */ @Override protected void onDraw(Canvas canvas) { if(!flag_temp){ switch(index){ case 0:bmp_draw0 = Bitmap.createBitmap(bmp_back,start_x,0,width,height); bmp_draw1 = bmp_draw0; canvas.drawBitmap(bmp_draw0,0,0,new Paint()); break; case 1:bmp_draw0 = Bitmap.createBitmap(bmp_bg1,start_x,0,width,height); bmp_draw1 = bmp_draw0; canvas.drawBitmap(bmp_draw0,0,0,new Paint()); break; } }else{ switch(index){ case 0:bmp_draw0 = Bitmap.createBitmap(bmp_back,start_x,0,bmp_back.getWidth()-start_x,height); bmp_draw1 = Bitmap.createBitmap(bmp_bg1,0,0,start_x+width-backwidth,height); canvas.drawBitmap(bmp_draw0,0,0,new Paint()); canvas.drawBitmap(bmp_draw1, width-bmp_draw1.getWidth(),0, new Paint()); break; case 1:bmp_draw0 = Bitmap.createBitmap(bmp_bg1,start_x,0,bmp_bg1.getWidth()-start_x,height); bmp_draw1 = Bitmap.createBitmap(bmp_back,0,0,start_x+width-backwidth,height); canvas.drawBitmap(bmp_draw0,0,0,new Paint()); canvas.drawBitmap(bmp_draw1, width-bmp_draw1.getWidth(),0, new Paint()); break; } } Log.v("v","draw1:"+bmp_draw0.getWidth()+"draw2:"+bmp_draw1.getWidth()+" strat_x"+start_x); // TODO Auto-generated method stub super.onDraw(canvas); } }

Android自定义view失败

安卓编程时想在xml布局中自定义一个view,但当把自定义的view写在xml里面时,就会报错说The following classes could not be instantiated:- com.example.wifidetection.MyPaint.MyView 。 其中MyView就是我自定义的view,前面是它的路径,里面wifideection是包名,MyPaint是MyView所在的类,代码如下: <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:custom="http://schemas.android.com/apk/res/com.example.wifidetection" android:id="@+id/mScrollView" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" > <LinearLayout android:orientation = "vertical" android:id="@+id/main_layout" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/start" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="开始绘图" /> <com.example.wifidetection.MyPaint.MyView android:layout_width="200dp" android:layout_height="100dp" /> </LinearLayout> </ScrollView> ``` ``` MyPaint中是这样的 public class MyPaint extends ActionBarActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ····· setContentView(R.layout.paint_layout);//显示MyView布局 } class MyView extends View { public MyView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public MyView(Context context){ super(context); ``` ``` 一直搞不懂,网上也没找到什么好的解释,求论坛里大神解答

Apache camel 自定义组件

请教如何通过Apache camel 自定义http组件。求求求 请教如何通过Apache camel 自定义http组件。求求求

Android中给自定义文本添加阴影效果

我用xml文件和代码给自定义字体添加阴影,但没有成功,是代码出错吗? TextView text=(TextView)findViewById(R.id.text1); Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/gillsans.ttf"); text.setTypeface(tf);

Android自定义控件,引用里面的方法,如何引用

我自己定义了一个继承自gridview的类,主布局引用,想在主布局里再添加一个button,然后这个button点击处理事件是自定义控件里的一个方法,该怎么调用? new mygridview().方法;不能实现,点击按钮后,程序崩溃

android自定义view怎样指定自定义view的布局

我有现成的布局xml文件,现在想定义一个组合的自定义view,怎样把这个view的布局指定为一个xml文件

自定义roundProgressBar,在xml中定义组件属性,无法生效

我从网上找到了自定义roundProgressBar的代码,使用之后,发现在xml中定义组建的属性没有作用,生成的roundProgressBar只是使用了默认配置 attributes: <resources> <!-- max 最大进度 startAngle 进度从圆环的哪个角度开始走 backColor 圆环内部的填充色 roundColor 圆环的颜色 roundProgressColor 圆环进度的颜色 roundWidth 圆环宽度 textColor 中心文字的颜色 textSize 中心文字的大小 textIsDisplayable 中心文字是否显示 style = 0/1 进度的风格,实心或者空心 --> <declare-styleable name="RoundProgressBar"> <attr name="max" format="integer"></attr> <attr name="startAngle" format="integer"></attr> <attr name="roundColor" format="color"/> <attr name="roundProgressColor" format="color"/> <attr name="roundWidth" format="dimension"></attr> <attr name="backColor" format="color" /> <attr name="textColor" format="color" /> <attr name="textSize" format="dimension" /> <attr name="textIsDisplayable" format="boolean"></attr> <attr name="style"> <enum name="STROKE" value="0"></enum> <enum name="FILL" value="1"></enum> </attr> </declare-styleable> </resources> roundProgressBar中获取定义属性并赋值: TypedArray mTypedArray = context.obtainStyledAttributes(attrs, R.styleable.RoundProgressBar); //获取自定义属性和默认值,第一个参数是从用户属性中得到的设置,如果用户没有设置,那么就用默认的属性,即:第二个参数 //圆环的颜色 roundColor = mTypedArray.getColor(bm.org.uidemo.R.styleable.RoundProgressBar_roundColor, Color.parseColor("#f9e0e1")); //圆环进度条的颜色 roundProgressColor = mTypedArray.getColor(R.styleable.RoundProgressBar_roundProgressColor, Color.parseColor("#ef7b55")); //文字的颜色 textColor = mTypedArray.getColor(R.styleable.RoundProgressBar_textColor, Color.parseColor("#be7e77")); //文字的大小 textSize = mTypedArray.getDimension(R.styleable.RoundProgressBar_textSize, 20); //圆环的宽度 roundWidth = mTypedArray.getDimension(R.styleable.RoundProgressBar_roundWidth, 10); //最大进度 max = mTypedArray.getInteger(R.styleable.RoundProgressBar_max, 100); //是否显示中间的进度 textIsDisplayable = mTypedArray.getBoolean(R.styleable.RoundProgressBar_textIsDisplayable, true); //进度的风格,实心或者空心 style = mTypedArray.getInt(R.styleable.RoundProgressBar_style, 0); //进度开始的角度数 startAngle = mTypedArray.getInt(R.styleable.RoundProgressBar_startAngle, -90); // 圆形颜色 backColor = mTypedArray.getColor(R.styleable.RoundProgressBar_backColor, Color.parseColor("#f8f8f8")); mTypedArray.recycle(); xml中的定义代码: <bm.org.uidemo.RoundProgressBar android:id="@+id/investment_RoundProgressBar" android:layout_width="38dip" android:layout_height="71dip" android:layout_marginTop="15dip" android:layout_marginRight="20dip" android:layout_alignParentRight="true" android_custom:backColor="#f8f8f8" android_custom:startAngle="0" android_custom:roundColor="#000000" android_custom:roundProgressColor="#ffffff" android_custom:roundWidth="90dp" android_custom:textColor="#be7e77" android_custom:textSize="20sp" /> 能有大大告诉我为啥设置没有生效吗??

Android:如何添加一个自定义的按钮状态

例如,默认按钮在它的状态和背景图片之间具有以下依赖: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_window_focused="false" android:state_enabled="true" android:drawable="@drawable/btn_default_normal" /> <item android:state_window_focused="false" android:state_enabled="false" android:drawable="@drawable/btn_default_normal_disable" /> <item android:state_pressed="true" android:drawable="@drawable/btn_default_pressed" /> <item android:state_focused="true" android:state_enabled="true" android:drawable="@drawable/btn_default_selected" /> <item android:state_enabled="true" android:drawable="@drawable/btn_default_normal" /> <item android:state_focused="true" android:drawable="@drawable/btn_default_normal_disable_focused" /> <item android:drawable="@drawable/btn_default_normal_disable" /> </selector> 我如何定义自己的自定义状态(如android:state_custom), 然后可以使用它动态地改变按钮的外观吗?

Android 打包依赖,导入后使用自定义View找不到attr属性

我将library打包成依赖后,发布到**jitpack**,在项目中导入后,使用library中的自定义View,所有的自定义的attr属性都标红线且没有代码提示,但是编译运行都没有问题,布局文件中加入了xmlns:app="http://schemas.android.com/apk/res-auto",也没有效果,求解

android 使用自定义控件后,在模拟器上无限重启

如题。我自定义了一个title,作为公共的title,特别简单,代码如下 title的布局文件 ``` <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/title_layout" android:layout_width="match_parent" android:layout_height="50dp" android:background="@color/holo_blue_dark"> <TextView android:id="@+id/text_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/title_text" android:textColor="@color/white" android:textSize="16sp"/> <TextView android:id="@+id/btn_title_right" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="8dp" android:background="@drawable/btn_title_right_selector" android:textColor="@color/white" android:text="@string/today" android:textSize="12sp" android:gravity="center"/> </RelativeLayout> ``` title的实现类,只是加载,没有写响应呢 ``` package com.mensesrecord.base; import com.zhengwei.mensesrecord.R; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.widget.RelativeLayout; ``` package com.mensesrecord.base; import com.zhengwei.mensesrecord.R; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.widget.RelativeLayout; public class BaseTitleLayout extends RelativeLayout{ public BaseTitleLayout(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater.from(context).inflate(R.layout.title_layout, this); } } ``` 这是主布局 ``` <?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" android:orientation="vertical" > <com.mensesrecord.base.BaseTitleLayout android:id="@+id/title_layout" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout> ``` 主布局的实现类 ``` package com.mensesrecord.activity; import com.zhengwei.mensesrecord.R; import android.app.Activity; import android.os.Bundle; import android.view.Window; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); } } ``` 在模拟器上点击app之后模拟器自动重启,这是错误代码 ![图片说明](https://img-ask.csdn.net/upload/201506/08/1433736770_432811.png) 错误显示的是什么内存溢出,是不是和我写的欢迎页有关啊?我的欢迎页用了一个图片。。

android_studio xmln自定义不识别问题~ 求解答

在最布局中,已定义: xmlns:app="http://schemas.android.com/apk/res-auto"(自动识别) 在控件打app就是出不来属性 gradle里面的dependencies中已经依赖过:compile 'com.zhy:percent-support-extends:1.0.1'这是我需要的控件 ![图片说明](https://img-ask.csdn.net/upload/201511/25/1448425200_428537.png) Rebuild和CloseProject都已经试过,没用!! 在线求解答

android framework自定义主题无法使用问题

android 在framework\base\core\res\res\value\theme.xml中自定义主题无法使用问题,一直使用默认的主题,怎样解决

android 中自定义GridView的使用

楼主最近在学习安卓,用和ListView类似的方法实现Gridview的时候出现了问题。希望高手能指点一二。 aty_using_gridview.xml ``` <?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"> <GridView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/gridView" android:numColumns="3"/> </LinearLayout> ``` grid_view_cell.xml ``` <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="100dp" android:layout_height="100dp"> <ImageView android:layout_width="100dp" android:layout_height="100dp" android:id="@+id/img_grid_view" /> </FrameLayout> ``` 这个是Activity ``` public class AtyUsingGridView extends Activity { private GridView gridView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.aty_using_gridview); ImageGridViewAdapter adapter=new ImageGridViewAdapter(this); gridView.findViewById(R.id.gridView); gridView.setAdapter(adapter); } } ``` 这个是adapter ``` public class ImageGridViewAdapter extends BaseAdapter { private Context context=null; private ImageGridViewData data[]= { new ImageGridViewData( R.drawable.img2), new ImageGridViewData(R.drawable.img2), new ImageGridViewData( R.drawable.img2), }; public ImageGridViewAdapter(Context context){ this.context=context; } public Context getContext() { return context; } @Override public int getCount() { return data.length; } @Override public ImageGridViewData getItem(int i) { return data[i]; } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { FrameLayout fl=null; if(view!=null){ fl=( FrameLayout)view; }else{ fl= ( FrameLayout) LayoutInflater.from(getContext()).inflate(R.layout.grid_view_cell,null); } ImageGridViewData data=getItem(i); ImageView imgID=(ImageView)fl.findViewById(R.id.img_grid_view); imgID.setImageResource(data.imgID); return fl; } } ``` 运行出现错误如下 Unable to start activity java.lang.NullPointerException 我这有什么错误,希望高手给指出啊,万分感谢。

android自定义控件按钮无法点击

TitleLayout.java ``` package com.example.uicustomviews; import android.app.Activity; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.Toast; public class TitleLayout extends LinearLayout { public TitleLayout(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater.from(context).inflate(R.layout.title, this); Button titleBack = (Button) findViewById(R.id.title_back); Button titleEdit = (Button) findViewById(R.id.title_edit); titleBack.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ((Activity) getContext()).finish(); } }); titleEdit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getContext(), "You clicked Edit button", Toast.LENGTH_SHORT).show(); } }); } } ``` MainActivity.java ``` package com.example.uicustomviews; import android.app.Activity; import android.os.Bundle; import android.view.Window; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); } } ``` title.xml ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/title_bg" > <Button android:id="@+id/title_back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dip" android:background="@drawable/back_bg" android:text="Back" android:textColor="#fff" /> <TextView android:id="@+id/title_text" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:gravity="center" android:text="This is Title" android:textColor="#fff" android:textSize="22sp" /> <Button android:id="@+id/title_edit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dip" android:background="@drawable/edit_bg" android:text="Edit" android:textColor="#fff" /> </LinearLayout> ``` activity_main.xml ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <include layout="@layout/title" /> <com.example.uicustomviews.TitleLayout android:layout_width="match_parent" android:layout_height="wrap_content" > </com.example.uicustomviews.TitleLayout> </LinearLayout> ``` 求助 折腾了好久 导入别人的工程 上面这四份代码完全一样 别人的点击有反应 自己的没反应

Android的自定义ViewGroup addView后发现显示错误

之前的提问:http://ask.csdn.net/questions/375760 之前我以为是系统的问题,最近我发现,对于addView的情况这些不同,addView的是 view(单View)没有问题,一旦addView中,添加的是ViewGroup就会出现添加进来的 ViewGroup会在底层(在Android5.1以上的)。 希望各位大神探索一下。下面是我的代码: ```java public class MyViewGroup extends ViewGroup { public MyViewGroup(Context context) { this(context, null, 0); } public MyViewGroup(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyViewGroup(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); //测量子View的大小 int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { View childAt = getChildAt(i); measureChild(childAt, widthMeasureSpec, heightMeasureSpec); } } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { int childCount = getChildCount(); for (int i = 0; i < childCount; i++) { View childView = getChildAt(i); childView.layout(0, 0, childView.getMeasuredWidth(), childView.getMeasuredHeight()); } } } ``` 使用代码 ```java public class MainActivity extends AppCompatActivity { MyViewGroup mMyViewGroup; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mMyViewGroup = (MyViewGroup) findViewById(R.id.my_view_group); //添加第一个View final Button button = new Button(this); button.setText("第一个View"); button.setOnTouchListener(new View.OnTouchListener() { private ViewScaleHandler mViewScaleHandler; @Override public boolean onTouch(View v, MotionEvent event) { if (mViewScaleHandler == null) { mViewScaleHandler = new ViewScaleHandler(button); } return mViewScaleHandler.move(event); } }); mMyViewGroup.addView(button); //添加第二个View final Button button2 = new Button(this); button2.setBackgroundColor(Color.BLUE); button2.setText("第二个View"); button2.setOnTouchListener(new View.OnTouchListener() { private ViewScaleHandler mViewScaleHandler; @Override public boolean onTouch(View v, MotionEvent event) { if (mViewScaleHandler == null) { mViewScaleHandler = new ViewScaleHandler(button2); } return mViewScaleHandler.move(event); } }); mMyViewGroup.addView(button2); //添加第三个View //当R.layout.test_1 为单View没有出现问题,View在顶层 // final View view = LayoutInflater.from(this).inflate(R.layout.test_1, null); // view.setBackgroundColor(Color.YELLOW); // view.setOnTouchListener(new View.OnTouchListener() { // private ViewScaleHandler mViewScaleHandler; // // @Override // public boolean onTouch(View v, MotionEvent event) { // if (mViewScaleHandler == null) { // mViewScaleHandler = new ViewScaleHandler(view); // } // return mViewScaleHandler.move(event); // } // }); // mMyViewGroup.addView(view); //当R.layout.test_1 为ViewGroup出现问题,在Android5.1,这个ViewGroup在底层了 final View view = LayoutInflater.from(this).inflate(R.layout.test_2, null); view.setBackgroundColor(Color.YELLOW); view.setOnTouchListener(new View.OnTouchListener() { private ViewScaleHandler mViewScaleHandler; @Override public boolean onTouch(View v, MotionEvent event) { if (mViewScaleHandler == null) { mViewScaleHandler = new ViewScaleHandler(view); } return mViewScaleHandler.move(event); } }); mMyViewGroup.addView(view); } } ``` 现象 ![图片说明](https://img-ask.csdn.net/upload/201704/05/1491386985_820609.png) ![图片说明](https://img-ask.csdn.net/upload/201704/05/1491386998_506324.png)

Android要在布局xml里面通过包名点类名的方式应用自定义JAVA类的问题

各位请看第一张图。这是我在论坛上面找的一个demo,里面在一个xml文件里面用图中这种方式引用了这个自定义类。然后我想放到自己的项目里去引用,而且也改了包名,结果就报错了。。为什么,说的是类型的错误。![图片说明](https://img-ask.csdn.net/upload/201502/01/1422776412_262031.png)

android中设置自定义activity弹出框大小

我自己写了一个播放器界面,采用继承Theme.Dialog的形式,但是我觉得弹出框太小放不下我需要的内容,所以我想设置弹出框左右边距距离手机屏幕固定长度。但是在实际操作中我在activity文件里可以获取到屏幕宽度,但是无法设置弹出框大小。在xml文件里可以设置layout_width但是不知道怎么获取屏幕大小。求高人指点下如何设置? ![CSDN移动问答][1] [1]: http://ww2.sinaimg.cn/mw690/6426fe14gw1e9p56fwuwyj20lc0zkq5o.jpg "屏幕截图"

android studio在哪里创建android XML file

看极客学院的安卓教程,他们用eclipse创建的android XML file,可是我用的是android studio,找不到创建android XML file的选项啊

android怎样可以给其他的xml页面设置背景图片?通过代码设置

android怎样可以给其他的xml页面设置背景图片?通过代码设置

2019 Python开发者日-培训

2019 Python开发者日-培训

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

设计模式(JAVA语言实现)--20种设计模式附带源码

设计模式(JAVA语言实现)--20种设计模式附带源码

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

java后台+微信小程序 实现完整的点餐系统

java后台+微信小程序 实现完整的点餐系统

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

2019 AI开发者大会

2019 AI开发者大会

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Git 实用技巧

Git 实用技巧

Python数据清洗实战入门

Python数据清洗实战入门

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

程序员的算法通关课:知己知彼(第一季)

程序员的算法通关课:知己知彼(第一季)

MySQL数据库从入门到实战应用

MySQL数据库从入门到实战应用

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

.net core快速开发框架

.net core快速开发框架

玩转Python-Python3基础入门

玩转Python-Python3基础入门

Python数据挖掘简易入门

Python数据挖掘简易入门

微信公众平台开发入门

微信公众平台开发入门

程序员的兼职技能课

程序员的兼职技能课

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

HoloLens2开发入门教程

HoloLens2开发入门教程

微信小程序开发实战

微信小程序开发实战

Java8零基础入门视频教程

Java8零基础入门视频教程

相关热词 c# 按行txt c#怎么扫条形码 c#打包html c# 实现刷新数据 c# 两个自定义控件重叠 c#浮点类型计算 c#.net 中文乱码 c# 时间排序 c# 必备书籍 c#异步网络通信
立即提问