안드로이드 소스에서 imageview를 우측에 정렬하는 예제 소스, 가운데는 타이틀

 

핵심은 RelativeLayout을 이용하여 우측정렬하고,

이미지뷰를 RelativeLayout의 자식뷰로 설정하는것이다. addView 이용.

 

아래소스는 zxing를 이용해서 스캔할때, 스캔하는 화면 상단에 타이틀과 우측에 이미지 버튼을 넣은것이다.

 

import static android.graphics.Typeface.BOLD;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.journeyapps.barcodescanner.CaptureActivity;


public class QRActivity extends CaptureActivity{

    public Activity mQrActivity = null;
    public TextView title_view = null;
    public ImageView home_view = null;

    private Handler mHandler = new Handler();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        mQrActivity = this;

        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        layoutParams.height = dpToPx(80,this);
        title_view = new TextView(this);
        title_view.setLayoutParams(new LinearLayout.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT));
        title_view.setTextColor(Color.parseColor("#000000"));
        title_view.setBackgroundColor(Color.parseColor("#FFFFFF"));
        title_view.setTextSize(24);
        title_view.setTypeface(null,BOLD);
        title_view.setText("QR 인식시스템");
        title_view.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);
        this.addContentView(title_view, layoutParams);

        LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        home_view = new ImageView(this);

        RelativeLayout rLayout = new RelativeLayout(this);
        rLayout.setLayoutParams(new RelativeLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT , ViewGroup.LayoutParams.MATCH_PARENT ));

        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams( dpToPx(80,this) , dpToPx(80,this) );
        params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);  // 우측정렬
        home_view.setLayoutParams(params);
        home_view.setImageDrawable(getResources().getDrawable(R.drawable.home_icon));
        home_view.setPadding(dpToPx(27,this),dpToPx(27,this),dpToPx(27,this),dpToPx(27,this));
        rLayout.addView(home_view); // 자식뷰 설정
//        this.addContentView(home_view, layoutParams2);
        this.addContentView(rLayout, lParams);
        home_view.setOnClickListener(v->{
            this.onBackPressed();
        });

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    public static int dpToPx(float dp, Context context) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());
    }

    public static int spToPx(float sp, Context context) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics());
    }
    public static int dpToSp(float dp, Context context) {
        return (int) (dpToPx(dp, context) / context.getResources().getDisplayMetrics().scaledDensity);
    }
}

 

 

아래는 QR스캔 요청하는 소스, fragment에서..

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.navigation.NavDirections;
import androidx.navigation.Navigation;

import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import aa.bb.m.R;
import aa.bb.m.databinding.FragmentQrscanBinding;
import aa.bb.m.presentation.view.toast.CustomToast;

public class QrScanFragment extends Fragment {
    private final static String TAG = "QrScanFragment";
    private Logger mLogger = LoggerFactory.getLogger(QrScanFragment.class);
    private FragmentQrscanBinding mBinding;
    private long mVisitorId = 0;

    private IntentIntegrator qrScan;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        try{
            mLogger.debug("{}", "onCreateView-------------------------------");
            mBinding = FragmentQrscanBinding.inflate(inflater, container, false);
            View view = mBinding.getRoot();

            TextView mSettingTitle = getActivity().findViewById(R.id.settingTitle);
            mSettingTitle.setText("QR 인식시스템");

            getActivity().findViewById(R.id.statusBar).setVisibility(View.GONE);
            getActivity().findViewById(R.id.app_toolbar).setVisibility(View.VISIBLE);
            getActivity().findViewById(R.id.homeButton).setVisibility(View.VISIBLE);
            getActivity().findViewById(R.id.backButton).setVisibility(View.GONE);
            mBinding.btnQrScan.setVisibility(View.GONE);

            return view;
        }catch (Exception e){
            mLogger.debug("{}", "QRScanFragment error:"+e.getMessage());
        }
        return null;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mLogger.debug("{}", "onViewCreated-------------------------------");

        readQRCode();


    }

    private void readQRCode(){
//        qrScan = new IntentIntegrator(requireActivity());
        qrScan = IntentIntegrator.forSupportFragment(QrScanFragment.this);

        qrScan.setCameraId(0); // 전면카메라
        qrScan.setBeepEnabled(true); // 인식시 소리내기
        qrScan.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE);

        qrScan.setCaptureActivity(QRActivity.class);

        qrScan.setOrientationLocked(false);  // 핸드폰 방향에 따라
        qrScan.setPrompt("QR코드를 사각형안에 비춰주세요.");
        qrScan.initiateScan();

    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        mLogger.debug("{}", "onDestroyView-------------------------------");


    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // QR code scan result
        try{
            IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
            if(result != null) {
                if(result.getContents() == null) {
                    CustomToast.info(getContext(),"QR스캔 취소").show();
                    Navigation.findNavController(getView()).popBackStack(); // 이전화면 이동
                } else {
                    mLogger.debug("{}","Scanned:  "+result.getContents());
                    String msg = result.getContents();
                    String id = msg.substring(msg.indexOf("id=")+3,msg.indexOf("&"));
                    String auth = msg.substring(msg.indexOf("&auth=")+6);
                    mLogger.debug("{}","Scanned id:  "+id);
                    mLogger.debug("{}","Scanned auth:  "+auth);

                    NavDirections action = QrScanFragmentDirections.actionQrScanFragmentToVisitorInfoFragment(Integer.parseInt(id),auth,"", "");
                    Navigation.findNavController(getView()).navigate(action);
                }
            } else {
                super.onActivityResult(requestCode, resultCode, data);
            }
        }catch (Exception e){
            CustomToast.info(getContext(),"오류: QR을 스캔해주세요.").show();
            readQRCode();
        }
    }
}

+ Recent posts