6.5.4版本更新-“@”功能优化

This commit is contained in:
18401019693 2023-07-18 13:48:37 +08:00
parent 410fcb5895
commit 3376a57f9d
8 changed files with 138 additions and 38 deletions

View File

@ -92,6 +92,7 @@ import com.yunbao.live.dialog.LiveFansFragment;
import com.yunbao.live.dialog.LiveGameDialogFragment; import com.yunbao.live.dialog.LiveGameDialogFragment;
import com.yunbao.live.dialog.LiveGiftDialogFragment; import com.yunbao.live.dialog.LiveGiftDialogFragment;
import com.yunbao.live.dialog.LiveHDDialogFragment; import com.yunbao.live.dialog.LiveHDDialogFragment;
import com.yunbao.live.dialog.LiveInputDialogFragment;
import com.yunbao.live.dialog.LiveMicUserDialogFragment; import com.yunbao.live.dialog.LiveMicUserDialogFragment;
import com.yunbao.live.dialog.LiveTotalDialog; import com.yunbao.live.dialog.LiveTotalDialog;
import com.yunbao.live.dialog.LiveWishListDialogFragment4Audience; import com.yunbao.live.dialog.LiveWishListDialogFragment4Audience;
@ -1413,6 +1414,22 @@ public class LiveAudienceActivity extends LiveActivity {
manager.setRedPacketInfoModel(event.getRedPacketInfoModel()); manager.setRedPacketInfoModel(event.getRedPacketInfoModel());
} }
break; break;
case INPUT_DIALOG:
LiveInputDialogFragment liveInputDialogFragment = new LiveInputDialogFragment();
Bundle liveInputBundle = new Bundle();
liveInputBundle.putString(Constants.LIVE_DANMU_PRICE, mDanmuPrice);
liveInputBundle.putString(Constants.COIN_NAME, mCoinName);
liveInputBundle.putString(Constants.LIVE_UID, mLiveUid);
liveInputBundle.putString(Constants.LIVE_STREAM, mStream);
liveInputBundle.putString(Constants.LIVE_UID, mLiveUid);
if (event.getOlineUserlistModel() == null) {
liveInputBundle.putString("TagUser", "");
} else {
liveInputBundle.putString("TagUser", GsonUtils.toJson(event.getOlineUserlistModel()));
}
liveInputDialogFragment.setArguments(liveInputBundle);
liveInputDialogFragment.show(getSupportFragmentManager(), "LiveInputDialogFragment");
break;
} }

View File

@ -41,6 +41,7 @@ import com.makeramen.roundedimageview.RoundedImageView;
import com.yunbao.common.CommonAppConfig; import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.Constants; import com.yunbao.common.Constants;
import com.yunbao.common.bean.IMLoginModel; import com.yunbao.common.bean.IMLoginModel;
import com.yunbao.common.bean.OlineUserlistModel;
import com.yunbao.common.custom.VerticalImageSpan; import com.yunbao.common.custom.VerticalImageSpan;
import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.interfaces.OnItemClickListener; import com.yunbao.common.interfaces.OnItemClickListener;
@ -236,6 +237,20 @@ public class LiveChatAdapter extends RecyclerView.Adapter {
} }
void setData(final LiveChatBean bean, int position) { void setData(final LiveChatBean bean, int position) {
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (!TextUtils.isEmpty(bean.getId())&&!TextUtils.isEmpty(bean.getUserNiceName())){
Bus.get().post(new LiveAudienceEvent()
.setType(LiveAudienceEvent.LiveAudienceType.INPUT_DIALOG)
.setOlineUserlistModel(new OlineUserlistModel().setId(bean.getId()).setUserNicename(bean.getUserNiceName())));
}
Log.e("eqwewqeweq", bean.toString());
return true;
}
});
mTextView.setTextSize(fountSize); mTextView.setTextSize(fountSize);
automatic_chat.setTextSize(fountSize); automatic_chat.setTextSize(fountSize);
itemView.setTag(bean); itemView.setTag(bean);

View File

@ -26,9 +26,11 @@ import android.widget.RadioGroup;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import com.blankj.utilcode.util.GsonUtils;
import com.yunbao.common.Constants; import com.yunbao.common.Constants;
import com.yunbao.common.bean.BaseModel; import com.yunbao.common.bean.BaseModel;
import com.yunbao.common.bean.NobleTrumpetModel; import com.yunbao.common.bean.NobleTrumpetModel;
import com.yunbao.common.bean.OlineUserlistModel;
import com.yunbao.common.custom.MyRadioButton; import com.yunbao.common.custom.MyRadioButton;
import com.yunbao.common.dialog.AbsDialogFragment; import com.yunbao.common.dialog.AbsDialogFragment;
import com.yunbao.common.event.LiveInputEvent; import com.yunbao.common.event.LiveInputEvent;
@ -37,7 +39,6 @@ import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.utils.Bus; import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.DpUtil; import com.yunbao.common.utils.DpUtil;
import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.common.views.weight.AtTextWatcher; import com.yunbao.common.views.weight.AtTextWatcher;
import com.yunbao.common.views.weight.ViewClicksAntiShake; import com.yunbao.common.views.weight.ViewClicksAntiShake;
import com.yunbao.live.R; import com.yunbao.live.R;
@ -168,9 +169,10 @@ public class LiveInputDialogFragment extends AbsDialogFragment implements View.O
} }
String danmuPrice = bundle.getString(Constants.LIVE_DANMU_PRICE); String danmuPrice = bundle.getString(Constants.LIVE_DANMU_PRICE);
String coinName = bundle.getString(Constants.COIN_NAME); String coinName = bundle.getString(Constants.COIN_NAME);
mLiveUid = bundle.getString(Constants.LIVE_UID); mLiveUid = bundle.getString(Constants.LIVE_UID);
mHint1 =mContext.getString(R.string.live_open_alba) + danmuPrice + coinName + "/" +mContext.getString(R.string.live_tiao); mHint1 = mContext.getString(R.string.live_open_alba) + danmuPrice + coinName + "/" + mContext.getString(R.string.live_tiao);
mHint2 =mContext.getString(R.string.live_say_something); mHint2 = mContext.getString(R.string.live_say_something);
mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override @Override
public void onCheckedChanged(CompoundButton button, boolean isChecked) { public void onCheckedChanged(CompoundButton button, boolean isChecked) {
@ -195,7 +197,16 @@ public class LiveInputDialogFragment extends AbsDialogFragment implements View.O
} }
}); });
atTextWatcher = new AtTextWatcher(); atTextWatcher = new AtTextWatcher();
if (!TextUtils.isEmpty(bundle.getString("TagUser"))) {
OlineUserlistModel olineUserlistModel = GsonUtils.fromJson(bundle.getString("TagUser"), OlineUserlistModel.class);
atTextWatcher.insertTextForAt(olineUserlistModel, mInput);
new Handler().postDelayed(() -> {
mInput.requestFocus();
//软键盘弹出
imm.showSoftInput(mInput, InputMethodManager.SHOW_FORCED);
}, 600);
}
} }
@Override @Override
@ -312,7 +323,7 @@ public class LiveInputDialogFragment extends AbsDialogFragment implements View.O
messageType = SendMessageType.POPUPSCREEN; messageType = SendMessageType.POPUPSCREEN;
} else { } else {
radioButton.setCompoundDrawablesRelativeWithIntrinsicBounds(worldHornP, null, null, null); radioButton.setCompoundDrawablesRelativeWithIntrinsicBounds(worldHornP, null, null, null);
mInput.setHint(String.format(mContext.getString(R.string.whole_station_horn_hint), trumpetNum)); mInput.setHint(String.format(mContext.getString(R.string.whole_station_horn_hint), trumpetNum + ""));
messageType = SendMessageType.WORLDHORN; messageType = SendMessageType.WORLDHORN;
} }
} else { } else {
@ -367,7 +378,7 @@ public class LiveInputDialogFragment extends AbsDialogFragment implements View.O
@Override @Override
public void onError(String error) { public void onError(String error) {
ToastUtil.show( R.string.net_error); ToastUtil.show(R.string.net_error);
} }
}); });
} }

View File

@ -4,7 +4,6 @@ import android.app.Dialog;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.Gravity; import android.view.Gravity;
@ -29,13 +28,14 @@ import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.Constants; import com.yunbao.common.Constants;
import com.yunbao.common.bean.FansMedalBean; import com.yunbao.common.bean.FansMedalBean;
import com.yunbao.common.bean.LevelBean; import com.yunbao.common.bean.LevelBean;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.common.bean.OlineUserlistModel;
import com.yunbao.common.bean.UserBean; import com.yunbao.common.bean.UserBean;
import com.yunbao.common.dialog.AbsDialogFragment; import com.yunbao.common.dialog.AbsDialogFragment;
import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.http.CommonHttpUtil; import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.http.HttpCallback; import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.interfaces.CommonCallback; import com.yunbao.common.interfaces.CommonCallback;
import com.yunbao.common.interfaces.OnItemClickListener;
import com.yunbao.common.utils.Bus; import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.CommonIconUtil; import com.yunbao.common.utils.CommonIconUtil;
import com.yunbao.common.utils.DialogUitl; import com.yunbao.common.utils.DialogUitl;
@ -45,11 +45,11 @@ import com.yunbao.common.utils.RouteUtil;
import com.yunbao.common.utils.SVGAViewUtils; import com.yunbao.common.utils.SVGAViewUtils;
import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.views.weight.ViewClicksAntiShake;
import com.yunbao.live.R; import com.yunbao.live.R;
import com.yunbao.live.activity.LiveActivity; import com.yunbao.live.activity.LiveActivity;
import com.yunbao.live.activity.LiveReportActivity; import com.yunbao.live.activity.LiveReportActivity;
import com.yunbao.live.activity.LiveRyAnchorActivity; import com.yunbao.live.activity.LiveRyAnchorActivity;
import com.yunbao.common.bean.LiveBean;
import com.yunbao.live.event.LiveAudienceEvent; import com.yunbao.live.event.LiveAudienceEvent;
import com.yunbao.live.event.LiveRoomChangeEvent; import com.yunbao.live.event.LiveRoomChangeEvent;
import com.yunbao.live.http.LiveHttpUtil; import com.yunbao.live.http.LiveHttpUtil;
@ -265,6 +265,7 @@ public class LiveUserDialogFragment extends AbsDialogFragment implements View.On
} }
});*/ });*/
} }
private void initListener() { private void initListener() {
@ -498,7 +499,17 @@ public class LiveUserDialogFragment extends AbsDialogFragment implements View.On
} }
} }
ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.ai_te), new ViewClicksAntiShake.ViewClicksCallBack() {
@Override
public void onViewClicks() {
if (!TextUtils.isEmpty(mUserBean.getId()) && !TextUtils.isEmpty(mUserBean.getUserNiceName())) {
Bus.get().post(new LiveAudienceEvent()
.setType(LiveAudienceEvent.LiveAudienceType.INPUT_DIALOG)
.setOlineUserlistModel(new OlineUserlistModel().setId(mUserBean.getId()).setUserNicename(mUserBean.getUserNiceName())));
dismiss();
}
}
});
} }
private void updateFollow() { private void updateFollow() {
@ -557,7 +568,7 @@ public class LiveUserDialogFragment extends AbsDialogFragment implements View.On
updateFollow(); updateFollow();
if (isAttention == 1 && mLiveUid.equals(mToUid)) {//关注了主播 if (isAttention == 1 && mLiveUid.equals(mToUid)) {//关注了主播
((LiveActivity) mContext).sendSystemMessage( ((LiveActivity) mContext).sendSystemMessage(
CommonAppConfig.getInstance().getUserBean().getUserNiceName() +mContext.getString(R.string.live_follow_anchor)); CommonAppConfig.getInstance().getUserBean().getUserNiceName() + mContext.getString(R.string.live_follow_anchor));
} }
} }
}); });
@ -674,7 +685,7 @@ public class LiveUserDialogFragment extends AbsDialogFragment implements View.On
if (isAnchor) { if (isAnchor) {
dismiss(); dismiss();
((LiveActivity) mContext).openFansWindow(mToUid); ((LiveActivity) mContext).openFansWindow(mToUid);
}else{ } else {
Bus.get().post(new LiveAudienceEvent() Bus.get().post(new LiveAudienceEvent()
.setType(LiveAudienceEvent.LiveAudienceType.NOBLE)); .setType(LiveAudienceEvent.LiveAudienceType.NOBLE));
} }
@ -758,7 +769,7 @@ public class LiveUserDialogFragment extends AbsDialogFragment implements View.On
} else if (tag == R.string.live_setting_close_live_2) {//禁用直播 } else if (tag == R.string.live_setting_close_live_2) {//禁用直播
closeLive2(); closeLive2();
} else if (tag==R.string.live_setting_gap_3){ } else if (tag == R.string.live_setting_gap_3) {
setShutUp3(); setShutUp3();
} }
} }
@ -857,14 +868,15 @@ public class LiveUserDialogFragment extends AbsDialogFragment implements View.On
dismiss(); dismiss();
LiveHttpUtil.superCloseRoom(mLiveUid, 1, mSuperCloseRoomCallback); LiveHttpUtil.superCloseRoom(mLiveUid, 1, mSuperCloseRoomCallback);
} }
private void setShutUp3(){
private void setShutUp3() {
new LiveSettingSilenceDialog(mContext) new LiveSettingSilenceDialog(mContext)
.setItemClickListener((bean, position) -> { .setItemClickListener((bean, position) -> {
LiveHttpUtil.setShutUp(mLiveUid, mStream, 1, mToUid, bean+"",new HttpCallback() { LiveHttpUtil.setShutUp(mLiveUid, mStream, 1, mToUid, bean + "", new HttpCallback() {
@Override @Override
public void onSuccess(int code, String msg, String[] info) { public void onSuccess(int code, String msg, String[] info) {
if (code == 0) { if (code == 0) {
((LiveActivity) mContext).setShutUp(mToUid, mToName, 2,bean); ((LiveActivity) mContext).setShutUp(mToUid, mToName, 2, bean);
dismiss(); dismiss();
} else { } else {
ToastUtil.show(msg); ToastUtil.show(msg);

View File

@ -7,6 +7,7 @@ import com.yunbao.common.bean.AnchorRecommendItemModel;
import com.yunbao.common.bean.BaseModel; import com.yunbao.common.bean.BaseModel;
import com.yunbao.common.bean.LiveBean; import com.yunbao.common.bean.LiveBean;
import com.yunbao.common.bean.MsgModel; import com.yunbao.common.bean.MsgModel;
import com.yunbao.common.bean.OlineUserlistModel;
import com.yunbao.common.bean.RedPacketInfoModel; import com.yunbao.common.bean.RedPacketInfoModel;
import com.yunbao.common.bean.RedPacketModel; import com.yunbao.common.bean.RedPacketModel;
import com.yunbao.common.bean.WishModel; import com.yunbao.common.bean.WishModel;
@ -47,6 +48,16 @@ public class LiveAudienceEvent extends BaseModel {
private AllServerNotifyEvent allServerNotifyEvent; private AllServerNotifyEvent allServerNotifyEvent;
private RedPacketModel redPacketModel; private RedPacketModel redPacketModel;
private RedPacketInfoModel redPacketInfoModel; private RedPacketInfoModel redPacketInfoModel;
private OlineUserlistModel olineUserlistModel;
public OlineUserlistModel getOlineUserlistModel() {
return olineUserlistModel;
}
public LiveAudienceEvent setOlineUserlistModel(OlineUserlistModel olineUserlistModel) {
this.olineUserlistModel = olineUserlistModel;
return this;
}
public RedPacketInfoModel getRedPacketInfoModel() { public RedPacketInfoModel getRedPacketInfoModel() {
return redPacketInfoModel; return redPacketInfoModel;
@ -380,7 +391,8 @@ public class LiveAudienceEvent extends BaseModel {
VOTE_END(67, "投票结束"), VOTE_END(67, "投票结束"),
BLIND_BOX(68, "盲盒全服通知"), BLIND_BOX(68, "盲盒全服通知"),
RED_PACKET(69, "RedPacket"), RED_PACKET(69, "RedPacket"),
RED_PACKET_SUPER_JACKPOT(70, "超级红包"); RED_PACKET_SUPER_JACKPOT(70, "超级红包"),
INPUT_DIALOG(71, "输入框");
private int type; private int type;
private String name; private String name;

View File

@ -1386,11 +1386,12 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis
private Runnable timeRunnable = new Runnable() { private Runnable timeRunnable = new Runnable() {
@Override @Override
public void run() { public void run() {
if (redTimeCountdown > 0) { if (redTimeCountdown > 1) {
redTimeCountdown = redTimeCountdown - 1; redTimeCountdown = redTimeCountdown - 1;
timeHandler.postDelayed(timeRunnable, 1000); timeHandler.postDelayed(timeRunnable, 1000);
redPacketCountdown.setText(String.format(mContext.getString(R.string.red_packet_countdown), TimeUtils.getTime(redTimeCountdown))); redPacketCountdown.setText(String.format(mContext.getString(R.string.red_packet_countdown), TimeUtils.getTime(redTimeCountdown)));
} else { } else {
redTimeCountdown = 0;
timeHandler.removeCallbacks(timeRunnable); timeHandler.removeCallbacks(timeRunnable);
StringBuffer stringBuffer = new StringBuffer(); StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(mRedPacketModel.getRedPacketRemain()) stringBuffer.append(mRedPacketModel.getRedPacketRemain())
@ -1492,6 +1493,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis
@Override @Override
public void onSuccess(RedPacketInfoModel data) { public void onSuccess(RedPacketInfoModel data) {
if (TextUtils.equals(data.getReceiveStatus(), "0")) { if (TextUtils.equals(data.getReceiveStatus(), "0")) {
redTimeCountdown = redTimeCountdown - 1;
new XPopup.Builder(mContext) new XPopup.Builder(mContext)
.asCustom(new ReceiveRendPacketPopup(mContext, redTimeCountdown, mLiveUid, mStream, redPacketModel.getRedPacketId(), data, false)) .asCustom(new ReceiveRendPacketPopup(mContext, redTimeCountdown, mLiveUid, mStream, redPacketModel.getRedPacketId(), data, false))
.show(); .show();

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<corners android:radius="13dp" />
<solid android:color="#FC6945" />
</shape>
</item>
</selector>

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
@ -20,18 +19,37 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<TextView <LinearLayout
android:id="@+id/btn_report"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="14dp" android:layout_marginTop="14dp"
android:layout_marginEnd="14dp" android:layout_marginEnd="14dp"
android:gravity="end"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/btn_report"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center" android:gravity="center"
android:text="@string/report" android:text="@string/report"
android:textColor="#B1B1B1" android:textColor="#B1B1B1"
android:visibility="visible" android:visibility="visible" />
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" /> <TextView
android:id="@+id/ai_te"
android:layout_width="41dp"
android:layout_height="25dp"
android:layout_marginTop="10dp"
android:background="@drawable/background_fc6945"
android:gravity="center"
android:text="\@TA"
android:textColor="@color/white"
android:visibility="visible" />
</LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/btn_guard" android:id="@+id/btn_guard"
@ -154,9 +172,9 @@
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="17dp" android:layout_height="17dp"
android:layout_gravity="center"
android:layout_marginTop="13dp" android:layout_marginTop="13dp"
android:gravity="center" android:gravity="center"
android:layout_gravity="center"
android:orientation="horizontal"> android:orientation="horizontal">
<ImageView <ImageView
@ -231,11 +249,11 @@
android:layout_marginLeft="4dp" /> android:layout_marginLeft="4dp" />
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:orientation="horizontal"
android:layout_width="46.5dp" android:layout_width="46.5dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginStart="6dp"> android:layout_marginStart="6dp"
android:orientation="horizontal">
<ImageView <ImageView
android:id="@+id/user_card_lv_icon" android:id="@+id/user_card_lv_icon"
@ -292,28 +310,32 @@
android:layout_marginStart="6dp" android:layout_marginStart="6dp"
android:src="@mipmap/emperor_rom" /> android:src="@mipmap/emperor_rom" />
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="15dp" android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"> android:layout_marginBottom="15dp">
<ImageView <ImageView
android:src="@mipmap/icon_user_card_t1"
android:layout_width="17dp" android:layout_width="17dp"
android:layout_height="14dp"
android:layout_gravity="top" android:layout_gravity="top"
android:layout_height="14dp"/> android:src="@mipmap/icon_user_card_t1" />
<TextView <TextView
android:id="@+id/sign" android:id="@+id/sign"
android:text="這家夥很懶,什麽都沒留下"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="這家夥很懶,什麽都沒留下"
android:textColor="#B1B1B1" android:textColor="#B1B1B1"
android:textSize="14sp" /> android:textSize="14sp" />
<ImageView <ImageView
android:src="@mipmap/icon_user_card_t2"
android:layout_width="17dp" android:layout_width="17dp"
android:layout_height="14dp"
android:layout_gravity="bottom" android:layout_gravity="bottom"
android:layout_height="14dp"/> android:src="@mipmap/icon_user_card_t2" />
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout