Commit 2c3bf739 authored by Dark Zane's avatar Dark Zane Committed by GitHub

Merge branch 'fallenstardust:master' into master

parents d2ebbf4a f5e11e53
......@@ -60,7 +60,7 @@ public class ExCardListAdapter extends BaseQuickAdapter<ExCardData, BaseViewHold
}
}).fail((e) -> {
Log.e("seesee",e+"");
Log.e(TAG,e+"");
if (dialog_read_ex.isShowing()) {//关闭异常
try {
dialog_read_ex.dismiss();
......@@ -71,7 +71,6 @@ public class ExCardListAdapter extends BaseQuickAdapter<ExCardData, BaseViewHold
LogUtil.i(TAG, "webCrawler fail");
}).done((exCardDataList) -> {
Log.w("seesee",exCardDataList+"");
if (exCardDataList != null) {
LogUtil.i(TAG, "webCrawler done");
getData().clear();
......
......@@ -40,6 +40,7 @@ import cn.garymb.ygomobile.utils.FileUtils;
import cn.garymb.ygomobile.utils.YGOUtil;
import ocgcore.CardManager;
import ocgcore.DataManager;
import ocgcore.PackManager;
import ocgcore.StringManager;
import ocgcore.data.Card;
import ocgcore.enums.CardType;
......@@ -55,6 +56,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
private static final String TAG = String.valueOf(CardDetail.class);
private final CardManager cardManager;
private final PackManager packManager;
private final ImageView cardImage;
private final TextView name;
private final TextView desc;
......@@ -86,7 +88,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
private int curPosition;
private Card mCardInfo;
private CardListProvider mProvider;
private OnCardClickListener mListener;
private OnDeckManagerCardClickListener mListener;
private DialogUtils dialog;
private PhotoView photoView;
private LinearLayout ll_bar;
......@@ -128,7 +130,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
}
};
private boolean mShowAdd = false;
private OnFavoriteChangedListener mCallBack;
private OnFavoriteChangedListener mOnFavoriteChangedListener;
public CardDetail(BaseActivity context, ImageLoader imageLoader, StringManager stringManager) {
super(context.getLayoutInflater().inflate(R.layout.dialog_cardinfo, null));
......@@ -162,6 +164,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
attrView = findViewById(R.id.card_attribute);
lbSetCode = findViewById(R.id.label_setcode);
cardManager = DataManager.get().getCardManager();
packManager = DataManager.get().getPackManager();
close.setOnClickListener((v) -> {
if (mListener != null) {
mListener.onClose();
......@@ -211,8 +214,8 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
public void doMyFavorites(Card cardInfo) {
boolean ret = CardFavorites.get().toggle(cardInfo.Code);
mImageFav.setSelected(ret);
if (mCallBack != null) {
mCallBack.onFavoriteChange(cardInfo, ret);
if (mOnFavoriteChangedListener != null) {
mOnFavoriteChangedListener.onFavoriteChange(cardInfo, ret);
}
}
......@@ -238,12 +241,12 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
return mContext;
}
public void setOnCardClickListener(OnCardClickListener listener) {
public void setOnCardClickListener(OnDeckManagerCardClickListener listener) {
mListener = listener;
}
public void setCallBack(OnFavoriteChangedListener callBack) {
mCallBack = callBack;
mOnFavoriteChangedListener = callBack;
}
public void bind(Card cardInfo, final int position, final CardListProvider provider) {
......@@ -271,16 +274,10 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
mCardInfo = cardInfo;
imageLoader.bindImage(cardImage, cardInfo, ImageLoader.Type.middle);
dialog = DialogUtils.getdx(context);
cardImage.setOnClickListener((v) -> {
showCardImageDetail(cardInfo.Code);
});
packName.setText(getPackName());
cardImage.setOnClickListener((v) -> {showCardImageDetail(cardInfo.Code);});
packName.setText(packManager.findPackNameById(cardInfo.Alias != 0 ? cardInfo.Alias : cardInfo.Code));
name.setText(cardInfo.Name);
if (cardInfo.Name.equals("Unknown")) {
desc.setText(R.string.tip_card_info_diff);
} else {
desc.setText(cardInfo.Desc);
}
desc.setText(cardInfo.Name.equals("Unknown") ? context.getString(R.string.tip_card_info_diff) : cardInfo.Desc);
cardCode.setText(String.format("%08d", cardInfo.getCode()));
if (cardInfo.isType(CardType.Token)) {
faq.setVisibility(View.INVISIBLE);
......@@ -367,11 +364,6 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
}
}
private String getPackName(Card cardInfo) {
String packname = "";
return packname;
}
private void showCardImageDetail(int code) {
View view = dialog.initDialog(context, R.layout.dialog_photo);
......@@ -558,23 +550,20 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
public interface OnFavoriteChangedListener {
void onFavoriteChange(Card card, boolean favorite);
}
public interface OnShowPackListListener {
void onShowPackList(Card card);
}
public interface OnCardClickListener {
public interface OnDeckManagerCardClickListener {
void onOpenUrl(Card cardInfo);
void onAddMainCard(Card cardInfo);
void onAddSideCard(Card cardInfo);
void onImageUpdate(Card cardInfo);
void onClose();
}
public static class DefaultOnCardClickListener implements OnCardClickListener {
public DefaultOnCardClickListener() {
public static class OnCardSearcherCardClickListener implements OnDeckManagerCardClickListener {
public OnCardSearcherCardClickListener() {
}
@Override
......
......@@ -13,6 +13,7 @@ import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.loader.ImageLoader;
import cn.garymb.ygomobile.utils.CardUtils;
import ocgcore.DataManager;
import ocgcore.PackManager;
import ocgcore.StringManager;
import ocgcore.data.Card;
import ocgcore.enums.CardType;
......@@ -20,6 +21,7 @@ import ocgcore.enums.CardType;
public class CardDetailRandom {
private final View viewCardDetail;
private final ImageView cardImage;
private final TextView pack_name;
private final TextView name;
private final TextView desc;
private final TextView level;
......@@ -32,6 +34,7 @@ public class CardDetailRandom {
private final View atkdefView;
private final View textdefView;
private final StringManager mStringManager;
private final PackManager mPackManager;
private final Context mContext;
private static CardDetailRandom sCardDetailRandom = null;
......@@ -40,6 +43,7 @@ public class CardDetailRandom {
mContext = context;
viewCardDetail = inflate(context, R.layout.dialog_cardinfo_small, null);
cardImage = viewCardDetail.findViewById(R.id.card_image_toast);
pack_name = viewCardDetail.findViewById(R.id.pack_name);
name = viewCardDetail.findViewById(R.id.card_name_toast);
monsterlayout = viewCardDetail.findViewById(R.id.star_attr_race_toast);
level = viewCardDetail.findViewById(R.id.card_level_toast);
......@@ -53,12 +57,15 @@ public class CardDetailRandom {
desc = viewCardDetail.findViewById(R.id.text_desc_toast);
mStringManager = DataManager.get().getStringManager();
mPackManager = DataManager.get().getPackManager();
pack_name.setText(mPackManager.findPackNameById(cardInfo.Alias != 0 ? cardInfo.Alias :cardInfo.Code));
name.setText(cardInfo.Name);
type.setText(CardUtils.getAllTypeString(cardInfo, mStringManager).replace("/", "|"));
attrView.setText(mStringManager.getAttributeString(cardInfo.Attribute));
if (cardInfo.Desc.length() >= 100) desc.setTextSize(10);
if (cardInfo.Desc.length() >= 160) desc.setTextSize(9);
if (cardInfo.Desc.length() >= 220) desc.setTextSize(8);
if (cardInfo.Desc.length() >= 160) desc.setTextSize(8);
if (cardInfo.Desc.length() >= 220) desc.setTextSize(6);
desc.setText(cardInfo.Desc);
if (cardInfo.isType(CardType.Monster)) {
atkdefView.setVisibility(View.VISIBLE);
......
......@@ -288,7 +288,7 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB
mCardSelector.showFavorites(false);
}
});
mCardDetail.setOnCardClickListener(new CardDetail.DefaultOnCardClickListener() {
mCardDetail.setOnCardClickListener(new CardDetail.OnCardSearcherCardClickListener() {
@Override
public void onOpenUrl(Card cardInfo) {
WebActivity.openFAQ(getContext(), cardInfo);
......
......@@ -23,6 +23,7 @@ import java.util.List;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.loader.CardLoader;
import cn.garymb.ygomobile.loader.CardSearchInfo;
import cn.garymb.ygomobile.loader.ICardSearcher;
import cn.garymb.ygomobile.ui.adapters.SimpleSpinnerAdapter;
......@@ -31,6 +32,7 @@ import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import ocgcore.DataManager;
import ocgcore.LimitManager;
import ocgcore.PackManager;
import ocgcore.StringManager;
import ocgcore.data.Card;
import ocgcore.data.CardSet;
......
......@@ -35,7 +35,6 @@ import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
......@@ -66,6 +65,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants;
......@@ -78,6 +78,7 @@ import cn.garymb.ygomobile.bean.events.DeckFile;
import cn.garymb.ygomobile.core.IrrlichtBridge;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.loader.CardLoader;
import cn.garymb.ygomobile.loader.ICardSearcher;
import cn.garymb.ygomobile.ui.activities.BaseActivity;
import cn.garymb.ygomobile.ui.activities.WebActivity;
import cn.garymb.ygomobile.ui.adapters.CardListAdapter;
......@@ -103,6 +104,7 @@ import cn.garymb.ygomobile.utils.YGODialogUtil;
import cn.garymb.ygomobile.utils.YGOUtil;
import cn.garymb.ygomobile.utils.glide.GlideCompat;
import ocgcore.DataManager;
import ocgcore.PackManager;
import ocgcore.data.Card;
import ocgcore.data.LimitList;
import ocgcore.enums.LimitType;
......@@ -112,7 +114,8 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
protected DrawerLayout mDrawerLayout;
protected RecyclerView mListView;
protected CardLoader mCardLoader;
protected CardSearcher mCardSelector;
protected CardSearcher mCardSearcher;
protected PackManager mPackManager;
protected CardListAdapter mCardListAdapter;
protected boolean isLoad = false;
private HomeActivity activity;
......@@ -164,10 +167,11 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
mListView.setAdapter(mCardListAdapter);
setListeners();
mPackManager = new PackManager();
mCardLoader = new CardLoader(getContext());
mCardLoader.setCallBack(this);
mCardSelector = new CardSearcher(layoutView.findViewById(R.id.nav_view_list), mCardLoader);
mCardSelector.setCallBack(this);
mCardSearcher = new CardSearcher(layoutView.findViewById(R.id.nav_view_list), mCardLoader);
mCardSearcher.setCallBack(this);
tv_deck = layoutView.findViewById(R.id.tv_deck);
tv_result_count = layoutView.findViewById(R.id.result_count);
......@@ -414,7 +418,7 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
}).done((rs) -> {
isLoad = true;
dlg.dismiss();
mCardSelector.initItems();
mCardSearcher.initItems();
initLimitListSpinners(mLimitSpinner, mCardLoader.getLimitList());
//设置当前卡组
if (rs.source != null) {
......@@ -423,7 +427,7 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
setCurDeck(rs, false);
}
//设置收藏夹
mCardSelector.showFavorites(false);
mCardSearcher.showFavorites(false);
});
}
......@@ -541,7 +545,7 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
if (isShowCard()) return;
if (mCardDetail == null) {
mCardDetail = new CardDetail((BaseActivity) getActivity(), activity.getImageLoader(), activity.getStringManager());
mCardDetail.setOnCardClickListener(new CardDetail.OnCardClickListener() {
mCardDetail.setOnCardClickListener(new CardDetail.OnDeckManagerCardClickListener() {
@Override
public void onOpenUrl(Card cardInfo) {
WebActivity.openFAQ(getContext(), cardInfo);
......@@ -569,8 +573,8 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
}
});
mCardDetail.setCallBack((card, favorite) -> {
if (mCardSelector.isShowFavorite()) {
mCardSelector.showFavorites(false);
if (mCardSearcher.isShowFavorite()) {
mCardSearcher.showFavorites(false);
}
});
}
......
......@@ -18,7 +18,6 @@ import android.util.Log;
import android.view.Gravity;
import android.view.MenuItem;
import android.widget.FrameLayout;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
......
......@@ -154,7 +154,7 @@ public class HomeFragment extends BaseFragemnt implements OnDuelAssistantListene
try {
ServerUtil.refreshServer(activity);
} catch (IOException e) {
Log.e("seesee",e+"");
Log.e(TAG,e+"");
}
//showNewbieGuide("homePage");
return layoutView;
......
......@@ -186,9 +186,7 @@ public class DeckUtil {
String name = entry.getName();
name = name.substring(name.lastIndexOf("/"));
InputStream inputStream = zipFile.getInputStream(entry);
deckList.add(new DeckFile(
IOUtils.asFile(inputStream,
appsSettings.getCacheDeckDir() + "/" + name)));
deckList.add(new DeckFile(IOUtils.asFile(inputStream, appsSettings.getCacheDeckDir() + "/" + name)));
}
}
} finally {
......
......@@ -58,7 +58,6 @@ public class ServerUtil {
LogUtil.i(TAG, "server util, old pre-card version:" + oldVer);
String URL_DATAVER = URL_CN_DATAVER;
URL_DATAVER = (AppsSettings.get().getDataLanguage() == AppsSettings.languageEnum.Chinese.code) ? URL_CN_DATAVER : "https://github.com/DaruKani/TransSuperpre/blob/main/" + getLanguageId() + "/version.txt";
Log.w("seesee", URL_DATAVER);
OkhttpUtil.get(URL_DATAVER, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
......@@ -318,7 +317,6 @@ public class ServerUtil {
String url;
url = (AppsSettings.get().getDataLanguage() == AppsSettings.languageEnum.Chinese.code)
? URL_SUPERPRE_CN_FILE : "https://raw.githubusercontent.com/DaruKani/TransSuperpre/refs/heads/main/" + getLanguageId() + "/ygopro-super-pre.ypk";
Log.w("seesee",url);
return url;
}
......@@ -326,7 +324,6 @@ public class ServerUtil {
String json;
json = (AppsSettings.get().getDataLanguage() == AppsSettings.languageEnum.Chinese.code)
? URL_PRE_CARD : "https://raw.githubusercontent.com/DaruKani/TransSuperpre/refs/heads/main/" + getLanguageId() + "/test-release.json";
Log.w("seesee",json);
return json;
}
public enum ExCardState {
......
package ocgcore;
import org.greenrobot.eventbus.EventBus;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.bean.events.ExCardEvent;
import cn.garymb.ygomobile.loader.CardLoader;
/**
* 单例模式,使用get()方式自动获取单例
* 其field包括StringManager、LimitManager、CardManager
* 其field包括StringManager、PackManager、LimitManager、CardManager
*/
public class DataManager {
private static DataManager sLoader = null;
......@@ -28,29 +25,27 @@ public class DataManager {
}
private final StringManager mStringManager;
private final PackManager mPackManager;
private final LimitManager mLimitManager;
private final CardManager mCardManager;
private DataManager() {
mStringManager = new StringManager();
mPackManager = new PackManager();
mLimitManager = new LimitManager();
mCardManager = new CardManager(
AppsSettings.get().getDataBasePath(),
AppsSettings.get().getExpansionsPath().getAbsolutePath());
}
public StringManager getStringManager() {
return mStringManager;
}
public StringManager getStringManager() { return mStringManager;}
public PackManager getPackManager() { return mPackManager;}
public LimitManager getLimitManager() {
return mLimitManager;
}
public CardManager getCardManager() {
return mCardManager;
}
private boolean mInit;
public void load(boolean force) {
......@@ -64,6 +59,7 @@ public class DataManager {
}
if (needLoad) {
mStringManager.load();
mPackManager.load();
mLimitManager.load();
mCardManager.loadCards();
}
......
package ocgcore;
import android.util.Log;
import java.io.BufferedReader;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.ui.plus.VUiKit;
public class PackManager implements Closeable {
private static final String TAG = PackManager.class.getSimpleName();
private static final PackManager sPackManager = new PackManager();
private final List<Map.Entry<String, List<Integer>>> packList = new ArrayList<>();
public static PackManager get() {
return sPackManager;
}
public PackManager() {
}
@Override
public void close() {
// 如果有需要清理的资源,在这里处理
packList.clear();
}
public boolean load() {
packList.clear();
boolean rs1 = loadFile(AppsSettings.get().getResourcePath() + "/" + Constants.CORE_PACK_PATH);
boolean rs2 = loadFile(AppsSettings.get().getExpansionsPath() + "/" + Constants.CORE_PACK_PATH);
boolean res3 = loadFile(AppsSettings.get().getCacheDeckDir());
return rs1 && rs2 && res3;
}
public boolean loadFile(String path) {
if (path == null || path.isEmpty()) {
Log.e(TAG, "Invalid path provided.");
return false;
}
File[] fileList = new File(path).listFiles();
if (fileList == null || fileList.length == 0) {
Log.w(TAG, "No files found in the directory: " + path);
return false;
}
VUiKit.defer().when(() -> {
for (File packYdk : fileList) {
if (packYdk.isFile() && packYdk.getName().endsWith(Constants.YDK_FILE_EX)) {
try {
processFile(packYdk);
} catch (IOException e) {
Log.e(TAG, "Error processing file: " + packYdk.getAbsolutePath(), e);
}
}
}
return packList;
}).done((list) -> {
Log.i(TAG, "Loaded " + list.size() + " files.");
Log.i(TAG, toString()); // 在异步任务完成后打印packList
}).fail((error) -> {
Log.e(TAG, "Error loading files: " + error.getMessage());
});
return true;
}
private void processFile(File file) throws IOException {
List<Integer> ids = new ArrayList<>();
try (FileInputStream inputStream = new FileInputStream(file);
InputStreamReader in = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
BufferedReader reader = new BufferedReader(in)) {
String line;
while ((line = reader.readLine()) != null) {
if (line.startsWith("#")) {
continue;
}
try {
int id = Integer.parseInt(line.trim());
ids.add(id);
} catch (NumberFormatException e) {
Log.w(TAG, "Skipping invalid line in file " + file.getName() + ": " + line);
}
}
if (!ids.isEmpty()) {
packList.add(new AbstractMap.SimpleEntry<>(file.getName(), ids));
}
}
}
/**
* 通过给定的ID在packList中查找对应的String名称。
*
* @param id 要查找的ID。
* @return 如果找到匹配项,则返回对应的文件名;否则返回null。
*/
public String findPackNameById(Integer id) {
for (Map.Entry<String, List<Integer>> entry : packList) {
if (entry.getValue().contains(id)) {
return entry.getKey().substring(0, entry.getKey().lastIndexOf(Constants.YDK_FILE_EX));
}
}
return null; // 如果没有找到匹配项,则返回null
}
/**
* 通过给定的ID在packList中查找对应的String名称。
*
* @param packName 要查找的ID。
* @return 如果找到匹配项,则返回对应的文件名;否则返回null。
*/
public List<Integer> findIdsByPackName(String packName) {
List<Integer> mList = new ArrayList<>();
for (Map.Entry<String, List<Integer>> entry : packList) {
if (entry.getKey().contains(packName)) {
mList.addAll(entry.getValue());
return mList;
}
}
return null; // 如果没有找到匹配项,则返回null
}
/**
* 将packList的内容转换为字符串表示。
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder("PackList content:\n");
for (int i = 0; i < packList.size(); i++) {
Map.Entry<String, List<Integer>> entry = packList.get(i);
sb.append("Entry ").append(i + 1).append(": ").append(entry.getKey()).append(" -> [");
sb.append(String.join(", ", entry.getValue().stream().map(String::valueOf).toArray(String[]::new)));
sb.append("]\n");
}
return sb.toString();
}
}
\ No newline at end of file
......@@ -4,6 +4,9 @@ import android.text.TextUtils;
import android.util.Log;
import android.util.SparseArray;
import com.file.zip.ZipEntry;
import com.file.zip.ZipFile;
import java.io.BufferedReader;
import java.io.Closeable;
import java.io.File;
......@@ -16,8 +19,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
import com.file.zip.ZipEntry;
import com.file.zip.ZipFile;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants;
......
......@@ -179,7 +179,7 @@
android:id="@+id/ll_pack"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
......@@ -194,9 +194,6 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center_vertical"
android:maxLines="1"
android:paddingLeft="4dp"
android:singleLine="true"
android:textAppearance="@style/TextAppearance.AppCompat.Caption"
android:textColor="@color/holo_blue_bright"
tools:text="2024-12-21 25PP" />
......@@ -205,7 +202,7 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
......@@ -218,7 +215,6 @@
android:id="@+id/card_ot"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textColor="@color/white"
tools:text="Test" />
......@@ -336,7 +332,6 @@
android:id="@+id/card_type"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lines="2"
android:maxLines="2"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textColor="@color/holo_green_bright" />
......@@ -355,7 +350,6 @@
android:id="@+id/card_setname"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lines="4"
android:maxLines="4"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textColor="@color/holo_orange_bright"
......
......@@ -95,7 +95,15 @@
android:layout_height="match_parent"
android:background="@drawable/window2"
android:orientation="vertical">
<TextView
android:id="@+id/pack_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center_vertical"
android:textAppearance="@style/TextAppearance.AppCompat.Caption"
android:textColor="@color/holo_blue_bright"
tools:text="2024-12-21 25PP" />
<cn.garymb.ygomobile.ui.widget.AlwaysMarqueeTextView
android:id="@+id/card_name_toast"
android:layout_width="wrap_content"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment