[건재] 다이어로그의 고랭용법

새해가 시작되었습니다. 모멘트, QQ공간, 웨이보를 열어 강아지를 학대했습니다. 사진을 찍은 사람이 부유함을 자랑하기 시작했습니다. 오늘은 여러분을 데리고 이런 그림과 글의 작은 사례를 만들어 드리겠습니다.일단 효과부터 보자.목록 미리 보기 페이지 그림 상세 정보 페이지 업무 수요는 매우 간단합니다. 작은 그림 미리 보기를 한 다음에 어떤 작은 그림을 클릭하면 큰 그림에 들어가서 볼 수 있고 좌우로 미끄러져 그림을 볼 수 있습니다.실현 방향도 간단하다. 작은 그림 미리 보기 페이지는 GridView+ImageView를 사용하고 GridView에 onItem ClickListener를 추가하면 된다. 여기는 할 말이 없다.큰 그림을 보는 것도 간단하다. Activity나 Fragment를 뛰어넘어 자원 Id나 그림 Url을 전달하고 ViewPager로 표시하면 된다.그러나 정말 이렇게 한다면 오늘의 주제와는 반전도 상관없다.우리는 지금 수요를 다시 한 번 살펴보고 목록 전시 페이지를 보면 할 말이 없다. 관건은 큰 그림 미리 보기 인터페이스이다. 우리는 큰 그림 보기 페이지를 볼 수 있다. 우리는 하나의 기능만 제공하고ImageView를 볼 수 있다.Activity를 사용하면 너무 쓸모가 없을 뿐만 아니라 설정 파일에 등록해야 하기 때문에 너무 번거롭다.Fragment를 사용하는 것이 조금 나을 것 같지만 무거워 보이지만 Activity에 비해 훨씬 나을 것 같지만 이런 간단한 수요에는 귀찮고 가볍지 않다.우리의 최종 선택은 오늘의 주인공 다이얼로그다.
    public void setContentView(int layoutResID) {
        mWindow.setContentView(layoutResID);
    }

Dialog의 원본 코드를 보십시오. setContentView ().이것은 문제를 간단하게 만들었다. 이제 우리는Dialog를 사용자 정의하여 레이아웃 파일에 전송한 다음에 이Dialog를 전체 화면의 시뮬레이션으로Activity로 설정하면 된다
package hi.xiaoyu.hi_xiaoyu_dialog.ui;

import hi.xiaoyu.hi_xiaoyu_dialog.R;
import hi.xiaoyu.hi_xiaoyu_dialog.adapter.CommonPageAdapter;

import java.util.ArrayList;
import java.util.List;

import android.app.Dialog;
import android.content.Context;
import android.graphics.Rect;
import android.support.v4.view.ViewPager;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;

public class ImgScanHelper extends Dialog implements android.view.View.OnClickListener {

    private List<String> mListImgUrls;
    private Integer[] mImgIds;
    private Context mContext;
    private ViewPager mViewPager;
    private int mClickItem;

    public ImgScanHelper(Context context, Integer[] imgIds, int clickItem) {
        //  
        super(context, R.style.CustomDialog_fill);
        this.mContext = context;
        this.mImgIds = imgIds;
        this.mClickItem = clickItem;
        initView();
    }

    public ImgScanHelper(Context context, List<String> imgUrlss, int clickItem) {
            //  
        super(context, R.style.CustomDialog_fill);
        this.mContext = context;
        this.mListImgUrls = imgUrlss;
        this.mClickItem = clickItem;
        initView();
    }

    private void initView() {
        mViewPager = new ViewPager(mContext);
        LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.MATCH_PARENT);
        mViewPager.setLayoutParams(params);
        mViewPager.setBackgroundColor(0xFF000000);
        setContentView(mViewPager);
        setParams();
        initViewPager();
    }

    private void setParams() {
        LayoutParams lay = this.getWindow().getAttributes();
        DisplayMetrics dm = new DisplayMetrics();
        this.getWindow().getWindowManager().getDefaultDisplay().getMetrics(dm);
        Rect rect = new Rect();
        View view = getWindow().getDecorView();
        view.getWindowVisibleDisplayFrame(rect);
        lay.height = dm.heightPixels - rect.top;
        lay.width = dm.widthPixels;
    }

    private void initViewPager() {
        if (mImgIds != null && mImgIds.length > 0) {
            List<View> listImgs = new ArrayList<View>();
            for (int i = 0; i < mImgIds.length; i++) {
                ImageView iv = new ImageView(mContext);
                LayoutParams params = new LayoutParams(
                        LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
                iv.setLayoutParams(params);
                listImgs.add(iv);
                iv.setOnClickListener(this);
                iv.setImageResource(mImgIds[i]);
                //  
                // BitmapHelper.getInstance(mContext).display(iv,
                // mListImgUrls.get(i));
            }
            if (listImgs.size() > 0) {
                CommonPageAdapter pageAdapter = new CommonPageAdapter(listImgs);
                mViewPager.setAdapter(pageAdapter);
                mViewPager.setCurrentItem(mClickItem);
            }
        }
    }

    @Override
    public void onClick(View v) {
        this.dismiss();
    }

    @Override
    public void dismiss() {
        super.dismiss();

    }

}
  <style name="CustomDialog_fill" parent="@android:Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowBackground">@color/white</item>
    </style>

한 줄의 코드가 큰 그림의 미리보기를 실현하였다
new ImgScanHelper(MainActivity.this, mImgsIds, position).show();

여기서 우리는 다이얼로그를 하나의 Activity로 시뮬레이션하여 큰 그림 보기의 기능 수요를 실현했다.사실 우리가 비교적 간단한 수요 페이지를 만나거나 하나의 기능을 빌려주는 페이지로 분리해야 할 때 우리는Dialog 아날로그Activity의 방식으로 실현하면 코드를 더욱 간단명료하게 할 수 있다.그리고 복용성이 매우 높다. 예를 들어 위의 그림 미리보기 기능은 어디에나 쉽게 이식할 수 있다.요약:Dialog 아날로그Activity는 일부 경량급 기능 모듈에 적용된다. 예를 들어 도움말 기능, 이미지 보기, 이미지 미리보기 등 생명주기의 조작을 고려할 필요가 없다. 만약에 Activity가 이상하게 소각될 때 데이터 저장 조작을 해야 한다면 Activity나Fragment를 쓰는 데 시간을 많이 써야 한다.Activity와 Fragment에 비해 Dialog는 설정 파일에 등록할 필요가 없고 Fragment만큼 번거로운 생명주기가 없다. 만약에 당신의 UI 인터페이스가 생명주기에 따른 문제를 고려할 필요가 없다면 Dialog는Activity와 똑같은 기능을 거의 실현할 수 있다.Activity와 통신할 필요가 있다면 간단합니다. Dialog에 Activity의 인용이 있기 때문에 인터페이스 리셋, 알림 방송 등을 통해 통신할 수 있습니다.마찬가지로 당신도BaseDialog를 추출하여 코드를 추출하면 당신의 개발 효율을 크게 높일 수 있습니다.이제부터Dialog를 사랑하길 바래요!o(∩_∩)o
소스 주소

좋은 웹페이지 즐겨찾기