java-Android自定义控件时遇到的奇怪bug:

问题描述

Android自定义控件时遇到的奇怪bug:

《第一行代码——Android》第三章 3.4 自定义控件 问题
示例代码需要新建一个布局:title.xml
我进行了如下操作:
(1)

(2)

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"
    android:orientation="horizontal">

    <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="#000" />

    <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="Title Text"
        android:textColor="#fff"
        android:textSize="24sp" />

    <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="#000"
        />

</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"/>
</LinearLayout>

MainActivity.java:

 package com.test.lichee.uicustomviews;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Window;

public class MainActivity extends AppCompatActivity {

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

运行后出现如下报错:

02-02 12:01:38.180 6186-6186/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                 Process: com.test.lichee.uicustomviews, PID: 6186
                                                 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.lichee.uicustomviews/com.test.lichee.uicustomviews.MainActivity}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2371)
                                                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2423)
                                                     at android.app.ActivityThread.access$800(ActivityThread.java:155)
                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
                                                     at android.os.Handler.dispatchMessage(Handler.java:110)
                                                     at android.os.Looper.loop(Looper.java:193)
                                                     at android.app.ActivityThread.main(ActivityThread.java:5332)
                                                     at java.lang.reflect.Method.invokeNative(Native Method)
                                                     at java.lang.reflect.Method.invoke(Method.java:515)
                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)
                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641)
                                                     at dalvik.system.NativeStart.main(Native Method)
                                                  Caused by: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
                                                     at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:292)
                                                     at android.app.Activity.requestWindowFeature(Activity.java:3408)
                                                     at com.test.lichee.uicustomviews.MainActivity.onCreate(MainActivity.java:12)
                                                     at android.app.Activity.performCreate(Activity.java:5369)
                                                     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1096)
                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2335)
                                                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2423)?
                                                     at android.app.ActivityThread.access$800(ActivityThread.java:155)?
                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)?
                                                     at android.os.Handler.dispatchMessage(Handler.java:110)?
                                                     at android.os.Looper.loop(Looper.java:193)?
                                                     at android.app.ActivityThread.main(ActivityThread.java:5332)?
                                                     at java.lang.reflect.Method.invokeNative(Native Method)?
                                                     at java.lang.reflect.Method.invoke(Method.java:515)?
                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)?
                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641)?
                                                     at dalvik.system.NativeStart.main(Native Method)?

可是可以看见,我的MainActivity.java中并没有错,出现了Error信息与实际情况不符合的现象。很奇怪,我认为应该是我创建title时出了问题。

我的引入的图片如下:

解决方案

activity 和 v7包下的AppCompatActivity 去掉title是有区别的!楼主将AppCompatActivity改为Activity或者在AndroidManifest.xml中加个theme

解决方案二:

AndroidRuntimeException: requestFeature() must be called before adding content 报错的这句话意思就是requestFeature()方法要在你oncreat的setcontentview之前调用。看你贴的代码并没有问题啊。代码跟错误日志没有对应起来啊

解决方案三:

你的代码跟自定义控件什么关系???

解决方案四:

你的代码跟自定义控件什么关系???

解决方案五:

http://www.cnblogs.com/kissazi2/archive/2012/10/04/2711479.html

解决方案六:

将AppCompatActivity改为Activity

解决方案七:

代码顺序问题,改变一下setcontent和request的顺序

时间: 2024-10-31 04:58:58

java-Android自定义控件时遇到的奇怪bug:的相关文章

怎么在java项目运行时调试bug

问题描述 怎么在java项目运行时调试bug 如题,怎么在java项目运行时调试bug?这是一道面试题,感觉没思路啊. 解决方案 debug模式,log4j打印日志,单步运行打断点 解决方案二: 首先应该通过BUG的表现确定BUG可能产生的范围.如果是数据表现,那么应该关注数据操作部分的代码,简单的错误,通过代码复查应该能排除.如果是异常表现,那么看一下异常信息,获取错误代码行,如果有经验应该能直接排除.怎么看都觉得自己代码正确(貌似都这赶脚)...好吧,各种IDE工具都提供DEBUG功能,在预

gradle打包android程序时,如何修改java文件中的属性值

问题描述 gradle打包android程序时,如何修改java文件中的属性值 工程有个文件例如1.java文件:其中有个public final static String URL = "/www.baidu.com"; 现在的问题是如何在用gradle打包的时候可以更换1.java文件中的URL? ant打包就可以写不同的build.xml,在build.xml中更换URL的字符串,在利用ant构建的时候通过编译不同的build.xml来达到更换URL的目的. 现在不知道gradl

android:自定义控件时,需要的那个ondraw()方法具体是怎么绘制的?

问题描述 android:自定义控件时,需要的那个ondraw()方法具体是怎么绘制的? android:自定义控件时,需要的那个ondraw()方法具体是怎么绘制的? 因为不了解现在自定义控件的知识,所以请教大神... 解决方案 你好好读读<Android群英传>或者<Android开发艺术探究>吧!这个三言两语讲不清楚 解决方案二: 来我给你两个网址:http://blog.csdn.net/guolin_blog/article/details/17357967http://

Android自定义控件——开源组件SlidingMenu的项目集成

转载请注明出处:http://blog.csdn.net/allen315410/article/details/39611355        在实际项目开发中,定制一个菜单,能让用户得到更好的用户体验,诚然菜单的样式各种各样,但是有一种菜单--滑动菜单,是被众多应用广泛使用的.关于这种滑动菜单的实现,我在前面的博文中也介绍了如何自定义去实现,请参考Android自定义控件--侧滑菜单,这篇博文描述的是如何从无到有创建一个侧滑菜单的控件,里面的代码不多,但是处理的逻辑和各种效果比较复杂,如果稍

Android自定义控件之开关按钮学习笔记分享_Android

今天来讲讲自定义单个控件,就拿开关按钮来讲讲,相信大家见了非常多这样的了,先看看效果: 我们可以看到一个很常见的开关按钮,那就来分析分析. 首先: 这是由两张图片构成: ①一张为有开和关的背景图片 ②一张为控制开和关的滑动按钮 第一步: 写个类继承View,并重写几个方法: 第一个为构造函数,重写一个参数的函数和两个参数的函数就够了,因为两个参数的函数能够使用自定义属性 第二个为控制控件的大小–>protected void onMeasure(int widthMeasureSpec, int

Android自定义控件之仿优酷菜单_Android

去年的优酷HD版有过这样一种菜单,如下图: 应用打开之后,先是三个弧形的三级菜单,点击实体键menu之后,这三个菜单依次旋转退出,再点击实体键menu之后,一级菜单会旋转进入,点击一级菜单,二级菜单旋转进入,点击二级菜单的menu键,三级菜单旋转进入,再次点击二级菜单的旋转键,三级菜单又会旋转退出,这时再点击一级菜单,二级菜单退出,最后点击实体menu键,一级菜单退出. 总体来说实现这样的功能: (1)点击实体menu键时,如果界面上有菜单显示,不管有几个,全部依次退出,如果界面上没有菜单显示,

Android自定义控件深入学习 Android生成随机验证码_Android

在上一篇的文章中介绍了自定义控件的属性,详情见<详解Android自定义控件属性TypedArray以及attrs>.那么在这基础上实现随机验证码生成,里面的代码是自定义控件以及涉及到自定义view绘画.1.先看实现的效果图 看到这个效果图是不是感觉还可以.那么就看看源码吧.2.attr文件 <?xml version="1.0" encoding="utf-8"?> <resources> <attr name="

Android自定义控件实现随手指移动的小球_Android

一个关于自定义控件的小Demo,随着手指移动的小球. 先看下效果图: 实现代码如下: 1.自定义控件类 package com.dc.customview.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import

Android自定义控件之广告条滚动效果_Android

在一些电子商务网站上经常能够看到一些滚动的广告条,许多软件在首次使用时也有类似的广告条,如图: 其实在github上有实现这种效果的控件,不过这东西做起来也是很简单,我们今天就来看看该怎么做. 先来看看布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" and