Android的 - 拍摄照片用相机 [英] Android - Taking a picture with a camera
问题描述
我是新来的机器人,而我试图让我的应用程序需要从相机拍摄照片。看着这里的例子提供,我想在我的应用程序来实施 MainActivity.java
这样:
公共类MainActivity扩展ActionBarActivity {@覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main); // 17行
}
@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
//充气菜单;如果是present这增加了项目操作栏。
。getMenuInflater()膨胀(R.menu.menu_main,菜单);
返回true;
}@覆盖
公共布尔onOptionsItemSelected(菜单项项){
//处理动作栏项目点击这里。操作栏会
//自动处理上点击主页/向上按钮,只要
//你在AndroidManifest.xml中指定一个父活动。
INT ID = item.getItemId(); // noinspection SimplifiableIfStatement
如果(ID == R.id.action_settings){
返回true;
} 返回super.onOptionsItemSelected(项目);
}静态最终诠释REQUEST_IMAGE_CAPTURE = 1;公共无效dispatchTakePictureIntent(查看视图){
意图takePictureIntent =新意图(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePictureIntent,REQUEST_IMAGE_CAPTURE);
}
}
下面是我的 activity_main.xml中
:
<的RelativeLayout的xmlns:机器人=http://schemas.android.com/apk/res/android
的xmlns:工具=http://schemas.android.com/tools的android:layout_width =match_parent
机器人:layout_height =match_parent机器人:paddingLeft =@扪/ activity_horizontal_margin
机器人:paddingRight =@扪/ activity_horizontal_margin
机器人:paddingTop =@扪/ activity_vertical_margin
机器人:paddingBottom会=@扪/ activity_vertical_margin工具:上下文=MainActivity。> <的TextView的android:文本=@字符串/欢迎的android:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT机器人:layout_centerHorizontal =真
机器人:TEXTSIZE =40dp机器人:文字样式=大胆的机器人:文字颜色=#990000/>
< GridView控件
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:为numColumns =2
机器人:columnWidth时=50dp
机器人:重力=CENTER_HORIZONTAL>
<按钮
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:文字=@字符串/ picture_1
安卓的onClick =dispatchTakePictureIntent/>
< / GridView的>< / RelativeLayout的>
我收到以下错误:
了java.lang.RuntimeException:无法启动活动ComponentInfo {--- / MainActivity}:java.lang.UnsupportedOperationException:addView(查看,的LayoutParams)不支持的适配器视图
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269)
在android.app.ActivityThread.access $ 800(ActivityThread.java:139)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1210)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:136)
在android.app.ActivityThread.main(ActivityThread.java:5102)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
在dalvik.system.NativeStart.main(本机方法)
java.lang.UnsupportedOperationException:引起addView(查看,的LayoutParams)不支持的适配器视图
在android.widget.AdapterView.addView(AdapterView.java:478)
在android.view.LayoutInflater.rInflate(LayoutInflater.java:759)
在android.view.LayoutInflater.rInflate(LayoutInflater.java:758)
在android.view.LayoutInflater.inflate(LayoutInflater.java:492)
在android.view.LayoutInflater.inflate(LayoutInflater.java:397)
在android.view.LayoutInflater.inflate(LayoutInflater.java:353)
在android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegaeBase.java:228)
在android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
在--- /。MainActivity.onCreate(MainActivity.java:17)
在android.app.Activity.performCreate(Activity.java:5248)
在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2173)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269)
在android.app.ActivityThread.access $ 800(ActivityThread.java:139)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1210)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:136)
在android.app.ActivityThread.main(ActivityThread.java:5102)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
在dalvik.system.NativeStart.main(本机方法)
我可能做错事,所以任何人都可以指出我的错误?先谢谢了。
UnsupportedOperationException异常:addView(查看,的LayoutParams)不
支持适配器视图
块引用>适配器视图的一个子类(在你的情况GRIDVIEW)不能有孩子无论是在布局文件中手动添加或code补充说。
您code:
< GridView控件
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:为numColumns =2
机器人:columnWidth时=50dp
机器人:重力=CENTER_HORIZONTAL>
<按钮
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:文字=@字符串/ picture_1
安卓的onClick =dispatchTakePictureIntent/>
< / GridView的>不要这么做!
由于这将调用GridView控件的方法addView,抛出异常。而是使用:
< GridView控件
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:为numColumns =2
机器人:columnWidth时=50dp
机器人:重力=CENTER_HORIZONTAL/>此外,如果您在活动或适配器(其getView法)code使用LayoutInflater.inflate方法,不通过GridView控件作为第二个参数。例如,不使用:
convertView = inflator.inflate(R.layout.child,父母);
而是使用:
convertView = inflator.inflate(R.layout.child,父母,假);
I am new to android, and I am trying to make my app take a picture from the camera. Looking at the example provided here, I tried to implement in my app in
MainActivity.java
as such:public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // line 17 } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } static final int REQUEST_IMAGE_CAPTURE = 1; public void dispatchTakePictureIntent(View view) { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); } }
Here is my
activity_main.xml
:<RelativeLayout 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" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:text="@string/welcome" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:textSize="40dp" android:textStyle="bold" android:textColor="#990000"/> <GridView android:layout_width="wrap_content" android:layout_height="wrap_content" android:numColumns="2" android:columnWidth="50dp" android:gravity="center_horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/picture_1" android:onClick="dispatchTakePictureIntent"/> </GridView> </RelativeLayout>
I am getting the following error:
java.lang.RuntimeException: Unable to start activity ComponentInfo{---/.MainActivity}: java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269) at android.app.ActivityThread.access$800(ActivityThread.java:139) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5102) 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:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView at android.widget.AdapterView.addView(AdapterView.java:478) at android.view.LayoutInflater.rInflate(LayoutInflater.java:759) at android.view.LayoutInflater.rInflate(LayoutInflater.java:758) at android.view.LayoutInflater.inflate(LayoutInflater.java:492) at android.view.LayoutInflater.inflate(LayoutInflater.java:397) at android.view.LayoutInflater.inflate(LayoutInflater.java:353) at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegaeBase.java:228) at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102) at ---/.MainActivity.onCreate(MainActivity.java:17) at android.app.Activity.performCreate(Activity.java:5248) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2173) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269) at android.app.ActivityThread.access$800(ActivityThread.java:139) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5102) 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:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method)
I am probably doing something wrong, so can anyone point out my mistake? Thanks in advance.
解决方案UnsupportedOperationException: addView(View, LayoutParams) is not supported in AdapterView
A subclass of AdapterView (in your case GRIDVIEW) can't have children manually added either in the layout file or added in code.
Your code:
<GridView android:layout_width="wrap_content" android:layout_height="wrap_content" android:numColumns="2" android:columnWidth="50dp" android:gravity="center_horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/picture_1" android:onClick="dispatchTakePictureIntent"/> </GridView>
Don't do it!
As this will call the addView method of GridView, throwing the exception. Instead use:
<GridView android:layout_width="wrap_content" android:layout_height="wrap_content" android:numColumns="2" android:columnWidth="50dp" android:gravity="center_horizontal"/>
Also, if you use the LayoutInflater.inflate method in the code of the Activity or the adapter(its getView method), don't pass the GridView as the second parameter. For example, don't use:
convertView = inflator.inflate(R.layout.child, parent);
Instead use:
convertView = inflator.inflate(R.layout.child, parent, false);
这篇关于Android的 - 拍摄照片用相机的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!