From 9af8f716b9184b8ded27f4dd12e3054a28eeb1d6 Mon Sep 17 00:00:00 2001 From: hwf453 Date: Sat, 20 Jan 2024 18:43:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0emoji=E9=9D=96=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加emoji靖情 --- app/build.gradle | 2 + app/src/main/AndroidManifest.xml | 12 +- app/src/main/java/com/rehome/zhdcoa/App.java | 26 +++ .../rehome/zhdcoa/adapter/EmojiAdapter.java | 54 ++++++ .../zhdcoa/ui/activity/EmojiActivity.kt | 170 ++++++++++++++++++ .../zhdcoa/ui/fragment/MineFragment.java | 82 ++++++++- app/src/main/res/layout/activity_emoji.xml | 26 +++ app/src/main/res/layout/adapter_emoji.xml | 17 ++ app/src/main/res/layout/fragment_mine.xml | 41 +++-- 9 files changed, 411 insertions(+), 19 deletions(-) create mode 100644 app/src/main/java/com/rehome/zhdcoa/adapter/EmojiAdapter.java create mode 100644 app/src/main/java/com/rehome/zhdcoa/ui/activity/EmojiActivity.kt create mode 100644 app/src/main/res/layout/activity_emoji.xml create mode 100644 app/src/main/res/layout/adapter_emoji.xml diff --git a/app/build.gradle b/app/build.gradle index 2dae591..603c1b1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -144,6 +144,8 @@ dependencies { implementation 'org.bouncycastle:bcpkix-jdk15on:1.47' implementation 'commons-codec:commons-codec:1.15' implementation 'com.google.android.play:app-update:2.0.1' + //emoji表情符号 + implementation 'androidx.emoji:emoji-bundled:1.0.0' implementation project(':videocompressor') implementation project(':recorderlib') } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 37e1e20..57b0250 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,9 +23,8 @@ - - - @@ -44,7 +43,6 @@ android:name="android.hardware.telephony" android:required="false" /> - @@ -351,6 +349,10 @@ android:name=".ui.activity.ChangeMyPhoneActivity" android:configChanges="orientation|screenSize|keyboardHidden" android:screenOrientation="portrait" /> + + android:exported="false" /> onInitialized()"); + } + + @Override + public void onFailed(@Nullable Throwable throwable) + { + Log.e("app", "loadEmojiFromBundled()->onFailed()", throwable); + } + }); + + EmojiCompat.init(config); + } + // public static RefWatcher getRefWatcher(Context context) { // App application = (App) context.getApplicationContext(); // return application.refWatcher; diff --git a/app/src/main/java/com/rehome/zhdcoa/adapter/EmojiAdapter.java b/app/src/main/java/com/rehome/zhdcoa/adapter/EmojiAdapter.java new file mode 100644 index 0000000..6d5962a --- /dev/null +++ b/app/src/main/java/com/rehome/zhdcoa/adapter/EmojiAdapter.java @@ -0,0 +1,54 @@ +package com.rehome.zhdcoa.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.emoji.text.EmojiCompat; +import androidx.viewbinding.ViewBinding; + +import com.rehome.zhdcoa.base.BaseViewBindingAdapter; +import com.rehome.zhdcoa.bean.GridViewBean; +import com.rehome.zhdcoa.databinding.AdapterEmojiBinding; + +import java.util.List; + +public class EmojiAdapter extends BaseViewBindingAdapter { + + private final Context context; + private final List data; + + public EmojiAdapter(Context context,List datas) { + super(context); + this.context=context; + this.data=datas; + } + + @Override + protected void handleData(int position, @NonNull AdapterEmojiBinding binding) { + String item = data.get(position); + CharSequence character = EmojiCompat.get().process(item); + binding.tv.setText(character); + } + + @Override + protected AdapterEmojiBinding getBinding(@NonNull LayoutInflater inflater, ViewGroup parent) { + return AdapterEmojiBinding.inflate(inflater, parent, false); + } + + @Override + public int getCount() { + return data.size(); + } + + @Override + public Object getItem(int position) { + return data.get(position); + } + + @Override + public long getItemId(int position) { + return Long.valueOf(position); + } +} diff --git a/app/src/main/java/com/rehome/zhdcoa/ui/activity/EmojiActivity.kt b/app/src/main/java/com/rehome/zhdcoa/ui/activity/EmojiActivity.kt new file mode 100644 index 0000000..9a5f168 --- /dev/null +++ b/app/src/main/java/com/rehome/zhdcoa/ui/activity/EmojiActivity.kt @@ -0,0 +1,170 @@ +package com.rehome.zhdcoa.ui.activity + +import android.content.Intent +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.os.Bundle +import android.widget.AdapterView +import com.rehome.zhdcoa.adapter.EmojiAdapter +import com.rehome.zhdcoa.base.BaseActivityOaToolbarViewBinding +import com.rehome.zhdcoa.databinding.ActivityEmojiBinding + +class EmojiActivity : BaseActivityOaToolbarViewBinding() { + + private val emojiArray= mutableListOf() + + + override fun getViewBinding()= ActivityEmojiBinding.inflate(layoutInflater) + + override fun getToolbar() = binding.toolbarView.toolbar + + override fun initView() { + initToolbar("选择表情") + setLeftOnClickListener { finish() } + addData() + + + + var adapter = EmojiAdapter(this, emojiArray) + binding.gv.selector = ColorDrawable(Color.TRANSPARENT) + binding.gv.adapter = adapter + + binding.gv.onItemClickListener = AdapterView.OnItemClickListener { adapterView, view, i, l -> + val emojiStr = emojiArray[i] + val resultIntent = Intent() + val bundle = Bundle() + bundle.putString("emoji", emojiStr) + resultIntent.putExtras(bundle) + setResult(RESULT_OK, resultIntent) + finish(); + } + + } + + override fun initData() { + + } + + + private fun addData() { + emojiArray.add("\uD83D\uDE00") + emojiArray.add("😃") + emojiArray.add("😄") + emojiArray.add("😁") + + emojiArray.add("\uD83D\uDE06") + emojiArray.add("\uD83D\uDE05") + emojiArray.add("\uD83E\uDD23") + emojiArray.add("\uD83D\uDE02") + + emojiArray.add("\uD83D\uDE42") + emojiArray.add("\uD83D\uDE43") + emojiArray.add("\uD83E\uDD2D") + emojiArray.add("\uD83D\uDE09") + + emojiArray.add("\uD83D\uDE0A") + emojiArray.add("\uD83D\uDE07") + emojiArray.add("\uD83E\uDD70") + emojiArray.add("\uD83D\uDE0D") + + emojiArray.add("\uD83E\uDD29") + emojiArray.add("\uD83D\uDE18") + emojiArray.add("\uD83D\uDE17") + emojiArray.add("☺️") + + emojiArray.add("\uD83D\uDE1A") + emojiArray.add("\uD83D\uDE19") + emojiArray.add("\uD83E\uDD17") + emojiArray.add("\uD83D\uDE0B") + + emojiArray.add("\uD83D\uDE1B") + emojiArray.add("\uD83D\uDE1C") + emojiArray.add("\uD83E\uDD2A") + emojiArray.add("\uD83D\uDE1D") + + emojiArray.add("\uD83E\uDD75") + emojiArray.add("\uD83E\uDD76") + emojiArray.add("\uD83E\uDD74") + emojiArray.add("\uD83D\uDE35") + + + emojiArray.add("\uD83D\uDE0E") + emojiArray.add("\uD83E\uDD13") + emojiArray.add("\uD83E\uDDD0") + emojiArray.add("\uD83E\uDD11") + + + emojiArray.add("\uD83E\uDD10") + emojiArray.add("\uD83E\uDD28") + emojiArray.add("\uD83D\uDE10") + emojiArray.add("\uD83D\uDE11") + + emojiArray.add("\uD83D\uDE36") + emojiArray.add("\uD83D\uDE44") + emojiArray.add("\uD83D\uDE36️") + emojiArray.add("\uD83D\uDE0F") + + + emojiArray.add("\uD83E\uDD25") + emojiArray.add("\uD83D\uDE0C") + emojiArray.add("\uD83D\uDE14") + emojiArray.add("\uD83D\uDE2A") + + emojiArray.add("\uD83E\uDD24") + emojiArray.add("\uD83D\uDE34") + emojiArray.add("\uD83D\uDE37") + emojiArray.add("\uD83E\uDD12") + + emojiArray.add("\uD83E\uDD15") + emojiArray.add("\uD83E\uDD22") + emojiArray.add("\uD83E\uDD2E") + emojiArray.add("\uD83E\uDD27") + + emojiArray.add("\uD83E\uDD75") + emojiArray.add("\uD83E\uDD76") + emojiArray.add("\uD83E\uDD74") + emojiArray.add("\uD83D\uDE35") + + emojiArray.add("\uD83D\uDE12") + emojiArray.add("\uD83E\uDD2F") + emojiArray.add("\uD83E\uDD20") + emojiArray.add("\uD83E\uDD73") + + emojiArray.add("\uD83D\uDE26") + emojiArray.add("\uD83D\uDE1F") + emojiArray.add("\uD83D\uDE41") + emojiArray.add("\uD83E\uDD2B") + + emojiArray.add("\uD83D\uDE2E") + emojiArray.add("\uD83D\uDE2F") + emojiArray.add("\uD83D\uDE32") + emojiArray.add("\uD83D\uDE33") + + + emojiArray.add("\uD83D\uDE27") + emojiArray.add("\uD83D\uDE28") + emojiArray.add("\uD83D\uDE30") + emojiArray.add("\uD83D\uDE25") + + emojiArray.add("\uD83D\uDE22") + emojiArray.add("\uD83D\uDE2D") + emojiArray.add("\uD83D\uDE31") + emojiArray.add("\uD83D\uDE16") + + emojiArray.add("\uD83D\uDE23") + emojiArray.add("\uD83D\uDE1E") + emojiArray.add("\uD83D\uDE13") + emojiArray.add("\uD83D\uDE29") + + emojiArray.add("\uD83D\uDE2B") + emojiArray.add("\uD83E\uDD71") + emojiArray.add("\uD83D\uDE24") + emojiArray.add("\uD83D\uDE21") + + emojiArray.add("\uD83D\uDE20") + emojiArray.add("\uD83E\uDD2C") + emojiArray.add("\uD83D\uDE08") + emojiArray.add("\uD83E\uDD14") + //emojiArray.add("\uD83D\uDE2C") + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rehome/zhdcoa/ui/fragment/MineFragment.java b/app/src/main/java/com/rehome/zhdcoa/ui/fragment/MineFragment.java index 41d0223..d005593 100755 --- a/app/src/main/java/com/rehome/zhdcoa/ui/fragment/MineFragment.java +++ b/app/src/main/java/com/rehome/zhdcoa/ui/fragment/MineFragment.java @@ -1,5 +1,7 @@ package com.rehome.zhdcoa.ui.fragment; +import static android.app.Activity.RESULT_OK; + import android.Manifest; import android.app.Activity; import android.content.Context; @@ -11,18 +13,28 @@ import android.graphics.BitmapFactory; import android.graphics.Color; import android.net.Uri; import android.os.Build; +import android.os.Bundle; import android.os.Environment; import android.os.Looper; import android.provider.MediaStore; import android.text.TextUtils; import android.util.Log; import android.view.View; +import android.widget.ArrayAdapter; import android.widget.TextView; import android.widget.Toast; + +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.core.content.FileProvider; +import androidx.emoji.text.EmojiCompat; + import com.azhon.appupdate.listener.OnButtonClickListener; import com.azhon.appupdate.listener.OnDownloadListener; import com.azhon.appupdate.manager.DownloadManager; @@ -47,6 +59,7 @@ import com.rehome.zhdcoa.bean.HeadPhotoResultBean; import com.rehome.zhdcoa.bean.QtdbBean; import com.rehome.zhdcoa.ui.activity.ApplyAboutMeActivity; import com.rehome.zhdcoa.ui.activity.ChangeMyPhoneActivity; +import com.rehome.zhdcoa.ui.activity.EmojiActivity; import com.rehome.zhdcoa.ui.activity.LoginActivity; import com.rehome.zhdcoa.ui.activity.MyAdviceActivity; import com.rehome.zhdcoa.ui.activity.MyOrderActivity; @@ -82,6 +95,8 @@ public class MineFragment extends BaseLazyFragment { private static final int CROP = 2; public static final int UPDATE_HEAD_PHOTO = 100; + private ActivityResultLauncher launcherResultEmoji; + CircleImageView civHead; TextView tvName; TextView tvMentions; @@ -101,7 +116,11 @@ public class MineFragment extends BaseLazyFragment { TextView tvSm; TextView tvSq; TextView tv_order; + TextView tv_emj; + + // 在我们的这个位置的话创建我们的数组 + List array = new ArrayList<>(); private String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "com.rehome.ydoa/images"; @@ -126,6 +145,12 @@ public class MineFragment extends BaseLazyFragment { return instance; } + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + launcherResultEmoji = createActivityResultLauncher(); + } + @Override protected int getContentViewId() { return R.layout.fragment_mine; @@ -134,6 +159,18 @@ public class MineFragment extends BaseLazyFragment { @Override protected void initView() { findView(); + + + array.add("\uD83D\uDE00"); + array.add("😃"); + array.add("😄"); + array.add("😁"); + + + CharSequence character = EmojiCompat.get().process(array.get(0)); + tv_emj.setText(character); + + //android 10 以上 if (requireActivity().getExternalFilesDir(null) != null) { path = Objects.requireNonNull(requireActivity().getExternalFilesDir(null)).getPath() + "/images"; @@ -183,6 +220,7 @@ public class MineFragment extends BaseLazyFragment { tvSm = view.findViewById(R.id.tv_sm); tvSq = view.findViewById(R.id.tv_sq); tv_order = view.findViewById(R.id.tv_order); + tv_emj = view.findViewById(R.id.tv_emj); //提到我的 tvMentions.setOnClickListener(new View.OnClickListener() { @@ -211,6 +249,16 @@ public class MineFragment extends BaseLazyFragment { startActivity(intent2); } }); + + tv_emj.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(getActivity(), EmojiActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); + launcherResultEmoji.launch(intent); + } + }); + //修改密码 tvUpdatePwd.setOnClickListener(new View.OnClickListener() { @Override @@ -256,6 +304,10 @@ public class MineFragment extends BaseLazyFragment { dialog1.show(); } }); + + + + //我的订单 tv_order.setOnClickListener(new View.OnClickListener() { @Override @@ -370,6 +422,34 @@ public class MineFragment extends BaseLazyFragment { protected void initListener() { } + private ActivityResultLauncher createActivityResultLauncher() { + return registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), + new ActivityResultCallback() { + @Override + public void onActivityResult(ActivityResult result) { + int resultCode = result.getResultCode(); + Intent data = result.getData(); + if (resultCode == RESULT_OK) { + String emojiStr = data.getStringExtra("emoji"); + CharSequence character = EmojiCompat.get().process(emojiStr); + tv_emj.setText(character); + showLog(toHex(emojiStr)); + } + } + }); + } + + /** + * 将字符串转换为十六进制 + */ + private static String toHex(String input) { + StringBuilder sb = new StringBuilder(); + for (char c : input.toCharArray()) { + sb.append(Integer.toString((int) c, 16)); + } + return sb.toString().toUpperCase(); + } + public void clearImageDiskCache(Context context) { try { if (Looper.myLooper() == Looper.getMainLooper()) { @@ -837,7 +917,7 @@ public class MineFragment extends BaseLazyFragment { @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - if (resultCode == Activity.RESULT_OK) { + if (resultCode == RESULT_OK) { switch (requestCode) { case PICTURE_BOOK_CODE: try { diff --git a/app/src/main/res/layout/activity_emoji.xml b/app/src/main/res/layout/activity_emoji.xml new file mode 100644 index 0000000..c47f382 --- /dev/null +++ b/app/src/main/res/layout/activity_emoji.xml @@ -0,0 +1,26 @@ + + + + + + + + + diff --git a/app/src/main/res/layout/adapter_emoji.xml b/app/src/main/res/layout/adapter_emoji.xml new file mode 100644 index 0000000..be638b1 --- /dev/null +++ b/app/src/main/res/layout/adapter_emoji.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index 2aa1c7a..cdb69ad 100755 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -7,31 +7,46 @@ - - + android:layout_marginTop="120dp" + android:layout_marginBottom="9dp" + android:orientation="horizontal"> + + +