使用FAB打开相机?

时间:2018-06-27 18:05:15

标签: android camera floating-action-button

我对编码是完全陌生的,所以请尽可能清楚,我将尝试包括所需的所有内容,但是如果您需要更多代码,请询问!

我正试图让FAB在点击时打开相机,并将拍摄的照片保存到手机上的相机胶卷中。我以为这很简单,但是我很挣扎。我已经设法将科学怪人的代码放在一起,最终至少避免了任何错误,但是当您轻按FAB时没有任何反应。我也有两个FAB出现,一个在另一个的下面,部分被隐藏,我不确定为什么。我确实在选项卡式活动中有FAB,所以也许是搞砸了吗?

该标签的Java:

package org.gpnc.gpncscavengerhunt;


import android.content.Intent;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


/**
 * A simple {@link Fragment} subclass.
 */
public class hunt1tab1 extends Fragment {


    public hunt1tab1() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_hunt1tab1, container, false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        view.findViewById(R.id.btnCamera);

        FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.btnCamera);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(MediaStore.ACTION_IMAGE_CAPTURE));
                ;
            }
        });
    }

}

以下是同一标签的相关xml(还有一些文字和图片):

<android.support.design.widget.FloatingActionButton
    android:id="@+id/btnCamera"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|center"
    android:layout_margin="@dimen/fab_margin"
    android:layout_marginBottom="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.956"
    app:srcCompat="@android:drawable/ic_menu_camera" />

Here's a screenshot if that helps explain what I'm seeing as far as two FABs.

非常感谢!我已经在这里搜索过以尝试找到答案(这是我最初几次中断应用程序后又重新运行该应用程序的方式),但找不到我想要的任何东西(至少我能理解) )。

编辑:清单中也有这两个权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA"/>

2 个答案:

答案 0 :(得分:1)

在您的onClick方法中使用它:

pip3 install --upgrade pip

并在您的清单中添加此权限:

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivity(intent);

答案 1 :(得分:0)

对于多个FAB问题,我猜您实际上在布局中有两个。这里至少涉及两个布局:片段和承载该片段的活动。如果他们每个人都有一个FAB,那么当该活动加载该片段时,它们都会显示出来。也许您已将点击侦听器设置为FAB的是后面的那个,因此,如果不单击前面的那一个,您将无法单击它?

希望摆脱第二个FAB可以解决您的点击侦听器问题。如果没有,请告诉我,我们会考虑其他潜在原因。除此之外,还有其他一些注意事项:

  1. 确保在manifest文件的顶级AndroidManifest.xml元素下具有以下内容(请参见docs)。它告诉Android,您的应用将使用摄像头,并且需要在设备上提供摄像头功能才能使您的应用正常运行:

    <uses-feature android:name="android.hardware.camera" android:required="true" />

  2. 您将要呼叫startActivityForResult(...),而不是startActivity(...)。这样可以确保您要调用的片段/活动将使用其onActivityResult(...)方法进行调用,并带有有关所捕获相机的图片的信息。