AndroidオープンソースフレームワークCommentBottomBar下部コメント弾窓
7214 ワード
前言
通常、ソーシャルタイプのアプリでは、コメントに文字や文字+画像を付ける必要があります.このニーズに対応したコントロールCommentBottomBarを設計しました.プロジェクトはすでにGithubを発表して、Starを歓迎します!Githubアドレス:https://github.com/EverZc/CommentBottomBar
目次効果図 使用手順 一般的な方法 実現原理 1.効果図
効果の例
2.使用手順
Step 1.依存CommentBottomBarの追加
まず、プロジェクトのルート
次に依存するmoduleに追加します
Step 2.プロセスの使用
CommentBottomBarはとても使いやすいです
3.一般的な方法
メソッド名
説明
delegation(Context context)
作成方法
show(String hint)
コメントボックスをポップアップし、コメントのhintを記入します.
dismiss()
コメントポップアップボックスを非表示にし、ソフトキーボードを非表示にします.
setImages(ArrayList images)
画像の追加
getAdapterData()
現在のコメントボックスの画像を取得
getAdapter()
ポップアップ画像のadapterを取得
getCommentText()
コメントの取得
clear()
コメントテキストの内容とコメントの画像の内容を整理します
4.実現原理
ZBottomDialog説明
この下部コメントポップアップボックスは、下部ポップアップボックスとして、Material DesignのBottomSheetBehaviorを採用しています.まず、使用した関連内容を簡単に理解します.BottomSheetBehaviorポップアップには、次の5つの状態があります. STATE_COLLAPSED:折りたたみ状態で、bottom sheetsは下部にレイアウトの一部しか表示されません.表示高さはapp:behavior_peekHeight設定(本フレームは設定されていません); STATE_DRAGGING:移行状態で、ユーザーがbottom sheetを上または下にドラッグしている. STATE_SETTLING:指の離脱から最終停止までの時間 を表示する. STATE_EXPANDED:完全展開状態 STATE_HIDDEN:非表示状態.デフォルトはfalseですapp:behavior_hideableプロパティ設定が を非表示にできるかどうか
なぜBottomSheetDialog関連の方法を書き換えるのですか?BottomSheetDialogをそのまま使うと2つの問題が発生します BottomSheetDialogを初期化すると、インタフェースにはコメント文字のみが表示され、コメントの下のピクチャコンテンツのRecyclerView部分は が表示されるまで単独で引っ張る必要がある.コメントやコメント画像をスライドさせた後、コントロールのviewは隠されたが、ソフトキーボードは隠されず、dialog全体が閉じられなかった.
問題1解決:現在のdialogのスタイルを設定する必要がある:android:windowIsFloatingはfalse android:windowSoftInputModeはadjustResizeでなければ表示不全になる
問題2解決:まずBottomSheetBehaviorを取得してからBottomSheetBehaviorを設定する必要がある.BottomSheetCallback()のonStateChangedメソッドは単独で動作し、このとき状態newStateはBottomSheetBehaviorではない.STATE_HIDDENの場合、つまり隠し状態に入り、BottomSheetDialogのdismiss()メソッドを実行すればよい.
完全なコードは次のとおりです.
ZBottomSheetAdapter解釈説明
このアダプタの主な機能は、下部のコメントウィンドウの画像recyclerview用のadapterです.このadapterには2種類のItemViewタイプがあります(0:画像を追加し、1:画像を表示します)
ZBottomSheetAdapter Holderの説明
このコントロールの設計当初、adapterはGridLayoutManager spanCount=3を使用し、特定のitemは正方形の設計を採用していたため、holderで特殊な処理処理を行う必要があります.構造関数では現在のitemの幅を取得し、画像をロードする際にglideを使用して現在の図面にロードされている幅を処理します.
このholderのリスニングメソッドインタフェースの内容:
まとめ
開発中に多くのオープンソースのものが現在のビジネスを満たすとは限らない場合があります.このコントロールの部分は、多くの人の実装方法を参考にしてカスタマイズされています.オープンソースの過程でできるだけコードの規範と可読性を保証し、読者の理解を容易にする.皆さんのご指摘を歓迎します~
通常、ソーシャルタイプのアプリでは、コメントに文字や文字+画像を付ける必要があります.このニーズに対応したコントロールCommentBottomBarを設計しました.プロジェクトはすでにGithubを発表して、Starを歓迎します!Githubアドレス:https://github.com/EverZc/CommentBottomBar
目次
効果の例
2.使用手順
Step 1.依存CommentBottomBarの追加
まず、プロジェクトのルート
build.gradle
に追加します.allprojects {
repositories {
maven { url "https://jitpack.io" }
}
}
次に依存するmoduleに追加します
dependencies {
implementation 'com.github.EverZc:CommentBottomBar:latest.release.here'
}
Step 2.プロセスの使用
CommentBottomBarはとても使いやすいです
// :
ZBottomSheetPictureBar commentZBSP = ZBottomSheetPictureBar.delegation(MainActivity.this);
// : , EditText hint
commentZBSP.show(" ");
// : ( )
commentZBSP.setOnSeetBarOnClickListener(new ZBottomSheetPictureBar.OnSheetBarOnClickListener() {
@Override
public void onAddClick() {
Intent intent = new Intent(MainActivity.this, ImagePickActivityPicker.class);
intent.putExtra(IS_NEED_CAMERA, true);
int maxNumber = commentZBSP.getAdapterData().isEmpty() ?
ZBottomConstant.ARTICLE_IMAGE_MAX : ZBottomConstant.ARTICLE_IMAGE_MAX - commentZBSP.getAdapterData().size();
intent.putExtra(FilePicker.MAX_NUMBER, maxNumber);
startActivityForResult(intent, ZBottomConstant.REQUEST_CODE_PICK_IMAGE);
}
@Override
public void onCommitClick(ArrayList images, EditText editText) {
// ,
}
});
// : , 。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case ZBottomConstant.REQUEST_CODE_PICK_IMAGE:
//
if (resultCode == RESULT_OK) {
ArrayList imageList = data.getParcelableArrayListExtra(FilePicker.RESULT_PICK_IMAGE);
commentZBSP.setImages(imageList);
}
break;
}
}
3.一般的な方法
メソッド名
説明
delegation(Context context)
作成方法
show(String hint)
コメントボックスをポップアップし、コメントのhintを記入します.
dismiss()
コメントポップアップボックスを非表示にし、ソフトキーボードを非表示にします.
setImages(ArrayList images)
画像の追加
getAdapterData()
現在のコメントボックスの画像を取得
getAdapter()
ポップアップ画像のadapterを取得
getCommentText()
コメントの取得
clear()
コメントテキストの内容とコメントの画像の内容を整理します
4.実現原理
ZBottomDialog説明
この下部コメントポップアップボックスは、下部ポップアップボックスとして、Material DesignのBottomSheetBehaviorを採用しています.まず、使用した関連内容を簡単に理解します.BottomSheetBehaviorポップアップには、次の5つの状態があります.
なぜBottomSheetDialog関連の方法を書き換えるのですか?BottomSheetDialogをそのまま使うと2つの問題が発生します
問題1解決:現在のdialogのスタイルを設定する必要がある:android:windowIsFloatingはfalse android:windowSoftInputModeはadjustResizeでなければ表示不全になる
問題2解決:まずBottomSheetBehaviorを取得してからBottomSheetBehaviorを設定する必要がある.BottomSheetCallback()のonStateChangedメソッドは単独で動作し、このとき状態newStateはBottomSheetBehaviorではない.STATE_HIDDENの場合、つまり隠し状態に入り、BottomSheetDialogのdismiss()メソッドを実行すればよい.
完全なコードは次のとおりです.
public class ZBottomDialog extends BottomSheetDialog {
private BottomSheetBehavior behavior;
public ZBottomDialog(@NonNull Context context) {
super(context, R.style.bottomSheetEdit);
}
@Override
public void setContentView(View view) {
super.setContentView(view);
initialize(view);
}
private void initialize(final View view) {
ViewGroup parent = (ViewGroup) view.getParent();
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) parent.getLayoutParams();
behavior = (BottomSheetBehavior) params.getBehavior();
behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_HIDDEN) {
dismiss();
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});
}
}
ZBottomSheetAdapter解釈説明
このアダプタの主な機能は、下部のコメントウィンドウの画像recyclerview用のadapterです.このadapterには2種類のItemViewタイプがあります(0:画像を追加し、1:画像を表示します)
// , adapter holder
public void setOnReleaseImageListener(ZBottomSheetHolder.OnReleaseImageListener onReleaseImageListener) {
this.onReleaseImageListener = onReleaseImageListener;
}
public interface OnReleaseImageListener {
//
void onAddClick();
//
void onDelClick(ImageFile imageFile, int position);
// ( )
void onClick(int positon);
}
ZBottomSheetAdapter Holderの説明
このコントロールの設計当初、adapterはGridLayoutManager spanCount=3を使用し、特定のitemは正方形の設計を採用していたため、holderで特殊な処理処理を行う必要があります.構造関数では現在のitemの幅を取得し、画像をロードする際にglideを使用して現在の図面にロードされている幅を処理します.
// item , item
private int getItemWidth(){
WindowManager windowManager = (WindowManager) mContext
.getSystemService(Context.WINDOW_SERVICE);
return windowManager.getDefaultDisplay().getWidth();
}
このholderのリスニングメソッドインタフェースの内容:
public interface OnReleaseImageListener {
//
void onAddClick();
//
void onDelClick(ImageFile imageFile, int position);
// ( )
void onClick(int positon);
}
// item , glide
public void setData(ImageFile imageFile) {
mImageFile = imageFile;
Glide.with(mContext)
.load(imageFile.getPath())
.diskCacheStrategy(DiskCacheStrategy.RESULT)
.override(mWidth, mWidth)// px
.into(mCoverView);
}
まとめ
開発中に多くのオープンソースのものが現在のビジネスを満たすとは限らない場合があります.このコントロールの部分は、多くの人の実装方法を参考にしてカスタマイズされています.オープンソースの過程でできるだけコードの規範と可読性を保証し、読者の理解を容易にする.皆さんのご指摘を歓迎します~