关于Errorinflatingclasslinearlayout的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于AndroidLayoutInflater初始化RelativeLayou
关于Error inflating class linearlayout的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android LayoutInflater初始化RelativeLayout和LinearLayout的问题。、android LinearLayout和RelativeLayout实现精确布局、android – ClassCastException LinearLayout LayoutParams、android – getLayoutInflator和(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE)之间的区别是什么等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- Error inflating class linearlayout
- Android LayoutInflater初始化RelativeLayout和LinearLayout的问题。
- android LinearLayout和RelativeLayout实现精确布局
- android – ClassCastException LinearLayout LayoutParams
- android – getLayoutInflator和(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE)之间的区别是什么
Error inflating class linearlayout
开发环境改成了 android stuido
昨天同事打包 apk 运行时出现 Error inflating class linearlayout 崩溃。
我看了下布局文件,没发现错误,但是他的 AS 中布局文件既没有代码提示,也没有高亮提示,风格诡异,以为是设置问题,包括 xml 文件中任何错误信息也不提示,但是编译通过了。
xml 布局文件一个有四五个控件,线性布局,分布都正确,但是错误提示的确应该是布局文件出现错误。
最后发现是 LinearLayout 的字母都小写了,AS 有自动添加 layout 的功能,会自动填充代码,这个还是很方便,同事应该没有用这个功能。
剩下的的问题就是,AS 的提示功能以及高亮功能应该都是在它已经正确识别的情况下进行的,LinearLayout 开头出错,导致后面高亮以及提示都无法进行,修改后一切正常,回到人类世界。
至于为什么大小写,肯定是小写后 findclass 找不到 LinearLayout 类了。
Android LayoutInflater初始化RelativeLayout和LinearLayout的问题。
我自定义一个MyListView extends ListView, 在自定义的MyListView的构造函数里使用LayoutInflater初始化一个布局为RelativeLayout布局,然后获取这个RelativeLayout布局的宽和高时报错,使用LinearLayout就能够正常获取。
不知道这是什么情况。
MainActivity.java:
package com.fyfeng.listviewtest; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
主配置文件activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFD700" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <com.fyfeng.listviewtest.MyListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="fill_parent" > </com.fyfeng.listviewtest.MyListView> </RelativeLayout>自定义的MyListView extends ListView
package com.fyfeng.listviewtest; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListView; public class MyListView extends ListView { private static final String tag = MyListView.class.getSimpleName(); private int mHeaderWidth; private int mHeaderHeight; public MyListView(Context context) { super(context); this.init(); } public MyListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.init(); } public MyListView(Context context, AttributeSet attrs) { super(context, attrs); this.init(); } private void init() { LayoutInflater lif = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); View header = lif.inflate(R.layout.header, null); this.addHeaderView(header); measureView(header); mHeaderWidth = header.getMeasuredWidth(); mHeaderHeight = header.getMeasuredHeight(); Log.d(tag, "header width = " + mHeaderWidth + ", height = " + mHeaderHeight); } // 计算headView的width及height值 private void measureView(View child) { ViewGroup.LayoutParams p = child.getLayoutParams(); if (p == null) { p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); } int childWidthSpec = ViewGroup.getChildMeasureSpec(0, 0 + 0, p.width); int lpHeight = p.height; int childHeightSpec; if (lpHeight > 0) { childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY); } else { childHeightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); } child.measure(childWidthSpec, childHeightSpec); } }
private void measureView(View child) ;这个方法是直接从osc客户端源码里拷贝过来的。
ListView的headerView配置header.xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout>
初始化完这个header布局后,调用measureView(View child)方法就会报空指针异常:
08-13 23:27:37.007: D/AndroidRuntime(1337): Shutting down VM
08-13 23:27:37.007: W/dalvikvm(1337): threadid=3: thread exiting with uncaught exception (group=0x4001aa28)
08-13 23:27:37.007: E/AndroidRuntime(1337): Uncaught handler: thread main exiting due to uncaught exception
08-13 23:27:37.017: E/AndroidRuntime(1337): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fyfeng.listviewtest/com.fyfeng.listviewtest.MainActivity}: android.view.InflateException: Binary XML file line #12: Error inflating class java.lang.reflect.Constructor
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401)
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.app.ActivityThread.access$2100(ActivityThread.java:116)
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.os.Handler.dispatchMessage(Handler.java:99)
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.os.Looper.loop(Looper.java:123)
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.app.ActivityThread.main(ActivityThread.java:4203)
08-13 23:27:37.017: E/AndroidRuntime(1337): at java.lang.reflect.Method.invokeNative(Native Method)
08-13 23:27:37.017: E/AndroidRuntime(1337): at java.lang.reflect.Method.invoke(Method.java:521)
08-13 23:27:37.017: E/AndroidRuntime(1337): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
08-13 23:27:37.017: E/AndroidRuntime(1337): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
08-13 23:27:37.017: E/AndroidRuntime(1337): at dalvik.system.NativeStart.main(Native Method)
08-13 23:27:37.017: E/AndroidRuntime(1337): Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class java.lang.reflect.Constructor
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.view.LayoutInflater.createView(LayoutInflater.java:512)
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:564)
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.view.LayoutInflater.rInflate(LayoutInflater.java:617)
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
08-13 23:27:37.017: E/AndroidRuntime(1337): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:313)
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.app.Activity.setContentView(Activity.java:1620)
08-13 23:27:37.017: E/AndroidRuntime(1337): at com.fyfeng.listviewtest.MainActivity.onCreate(MainActivity.java:20)
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
08-13 23:27:37.017: E/AndroidRuntime(1337): ... 11 more
08-13 23:27:37.017: E/AndroidRuntime(1337): Caused by: java.lang.reflect.InvocationTargetException
08-13 23:27:37.017: E/AndroidRuntime(1337): at com.fyfeng.listviewtest.MyListView.<init>(MyListView.java:30)
08-13 23:27:37.017: E/AndroidRuntime(1337): at java.lang.reflect.Constructor.constructNative(Native Method)
08-13 23:27:37.017: E/AndroidRuntime(1337): at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.view.LayoutInflater.createView(LayoutInflater.java:499)
08-13 23:27:37.017: E/AndroidRuntime(1337): ... 21 more
08-13 23:27:37.017: E/AndroidRuntime(1337): Caused by: java.lang.NullPointerException
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:427)
08-13 23:27:37.017: E/AndroidRuntime(1337): at android.view.View.measure(View.java:7703)
08-13 23:27:37.017: E/AndroidRuntime(1337): at com.fyfeng.listviewtest.MyListView.measureView(MyListView.java:65)
08-13 23:27:37.017: E/AndroidRuntime(1337): at com.fyfeng.listviewtest.MyListView.init(MyListView.java:39)
08-13 23:27:37.017: E/AndroidRuntime(1337): ... 25 more
08-13 23:27:37.027: I/dalvikvm(1337): threadid=7: reacting to signal 3
08-13 23:27:37.027: E/dalvikvm(1337): Unable to open stack trace file ''/data/anr/traces.txt'': Permission denied
如果把header.xml中的RelativeLayout改为LinearLayout一切正常,能够获取宽和高。
谁遇到这种问题?有解的赐教一下。
android LinearLayout和RelativeLayout实现精确布局
先明确几个概念的区别:padding margin:都是边距的含义,关键问题得明白是什么相对什么的边距
padding:是控件的内容相对控件的边缘的边距.
margin :是控件边缘相对父空间的边距
android:gravity是对该view 内容的限定.
比如一个button 上面的text. 你可以设置该text 在view的靠左,靠右等位置.该属性就干了这个.
android:layout_gravity 是用来设置该view中的子view相对于父view的位置.
比如一个button 在linearlayout里,你想把该button放在靠左,靠右等位置就可以在linearlayout中通过该属性设置
XML 布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical"> <ImageView android:id="@+id/ivLogo" android:layout_width="50dp" android:layout_height="50dp" android:src="@drawable/icon" android:paddingLeft="5dp" /> <RelativeLayout android:id="@+id/rl_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="right" android:padding="10dp"> <TextView android:id="@+id/tvApplicationName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16dp" /> </RelativeLayout> <RelativeLayout android:id="@+id/rl_score" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="right" android:padding="10dp"> <TextView android:id="@+id/tvRating" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="5.0" /> <RatingBar android:id="@+id/ratingbar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="5"android:layout_below="@id/tvRating" /> </RelativeLayout> </LinearLayout>
上面布局文件的效果图
上面的布局文件是一个ListView中的list_item布局,在一个ListView中显示所有的APK资源,每个资源项显示图标,名称及评分。
在listItem的最外层LinearLayout中加android:gravity="center_vertical",设定内容垂直居中显示。
在id为rl_score的RelativeLayout中设定android:layout_width="fill_parent"来填充剩余空间;
android:gravity="right"设定内容相对于rl_score右对齐;
android:padding="10dp"设定RelativeLayout中的内容相对RelativeLayout的边缘的边距为10dp。
这个布局虽然简单,但却是经常用到的。
原文链接: http://blog.csdn.net/sunboy_2050/article/details/6723473
android – ClassCastException LinearLayout LayoutParams
12-22 16:00:37.620: W/System.err(7235): java.lang.classCastException: android.widget.FrameLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams 12-22 16:00:37.625: W/System.err(7235): at com.coover.eu.lostandfound.ListSearchFragment.onViewCreated(ListSearchFragment.java:184) 12-22 16:00:37.625: W/System.err(7235): at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:884) 12-22 16:00:37.630: W/System.err(7235): at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1080) 12-22 16:00:37.630: W/System.err(7235): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622) 12-22 16:00:37.630: W/System.err(7235): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416) 12-22 16:00:37.630: W/System.err(7235): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:505) 12-22 16:00:37.630: W/System.err(7235): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1178) 12-22 16:00:37.635: W/System.err(7235): at android.app.Activity.performStart(Activity.java:5216) 12-22 16:00:37.635: W/System.err(7235): at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2083) 12-22 16:00:37.635: W/System.err(7235): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 12-22 16:00:37.635: W/System.err(7235): at android.app.ActivityThread.access$700(ActivityThread.java:140) 12-22 16:00:37.635: W/System.err(7235): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 12-22 16:00:37.640: W/System.err(7235): at android.os.Handler.dispatchMessage(Handler.java:99) 12-22 16:00:37.640: W/System.err(7235): at android.os.Looper.loop(Looper.java:137) 12-22 16:00:37.640: W/System.err(7235): at android.app.ActivityThread.main(ActivityThread.java:4921) 12-22 16:00:37.640: W/System.err(7235): at java.lang.reflect.Method.invokeNative(Native Method) 12-22 16:00:37.640: W/System.err(7235): at java.lang.reflect.Method.invoke(Method.java:511) 12-22 16:00:37.645: W/System.err(7235): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 12-22 16:00:37.645: W/System.err(7235): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 12-22 16:00:37.645: W/System.err(7235): at dalvik.system.NativeStart.main(Native Method)
膨胀的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:id="@+id/container_found_list_overview"> <EditText android:id="@+id/search_Box" android:layout_width="fill_parent" android:layout_height="50dp" android:padding="5dp" android:textSize="35sp" android:hint="@string/search" android:inputType="text" android:maxLines="1"/> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/overview_list_view"> </ListView> </LinearLayout>
代码:
LinearLayout myView = (LinearLayout)this.getView().findViewById(R.id.container_found_list_overview); Log.d("found container",""+(myView != null)); try{ LayoutParams lp = (LayoutParams) myView.getLayoutParams(); lp.weight = 1; lp.width = 0; myView.setLayoutParams(lp); } catch(RuntimeException e){ Log.e("cant get layoutparams",e.getMessage()); e.printstacktrace(); }
解决方法
为什么是父母的类型?这是因为他们存储对父母有用的信息.如果要检索EditText或ListView的布局参数,您将获得LinearLayout $LayoutParams.
android – getLayoutInflator和(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE)之间的区别是什么
有什么区别,什么时候可以使用每一个?
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = inflater.inflate(R.layout.activity_custom_lists1,parent);
和
View v = getLayoutInflater().inflater.inflate(R.layout.activity_custom_lists1,parent);
解决方法
View v = getLayoutInflater().inflater.inflate(R.layout.activity_custom_lists1,parent);
有可能
View v = getLayoutInflater().inflate(R.layout.activity_custom_lists1,parent);
second one is called for the activity scope and the first one can be called from outside the Activity with the context
我们今天的关于Error inflating class linearlayout的分享已经告一段落,感谢您的关注,如果您想了解更多关于Android LayoutInflater初始化RelativeLayout和LinearLayout的问题。、android LinearLayout和RelativeLayout实现精确布局、android – ClassCastException LinearLayout LayoutParams、android – getLayoutInflator和(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE)之间的区别是什么的相关信息,请在本站查询。
本文标签: