안 드 로 이 드 는 QQ 를 모방 하여 닉네임 효 과 를 복사 합 니 다.
요 며칠 동안 텍스트 를 복사 하려 는 수요 가 있 었 는데 갑자기 QQ 에서 닉네임 과 QQ 번 호 를 복사 하 는 효 과 를 보 았 습 니 다.괜 찮 은 것 같 아서 흉 내 를 내 려 고 했 습 니 다.방법 이 비교적 간단 하고 거 칠 었 습 니 다.QQ 를 역 컴 파일 하여 그 9 그림 을 얻 었 습 니 다.그 다음 에 PopWindow 로 이 루어 졌 습 니 다.
해결 방법:
사용자 정의 PopWindow
public class CopyContentPopWindow extends PopupWindow {
private final View content;
TextView tvLabel;
TextView tvLabelFake;
Activity context;
private OnCopyContentListener onCopyContentListener;
public CopyContentPopWindow(Activity context) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
content = inflater.inflate(R.layout.popwindow_copy_content, null);
tvLabel = content.findViewById(R.id.tv_label);
tvLabelFake = content.findViewById(R.id.tv_label_fake);
tvLabel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onCopyContentListener != null) {
onCopyContentListener.copyContent();
}
CopyContentPopWindow.this.dismiss();
}
});
this.setContentView(content);
this.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
this.setFocusable(true);
this.setOutsideTouchable(true);
this.update();
ColorDrawable dw = new ColorDrawable(0000000000);
this.setBackgroundDrawable(dw);
this.context = context;
}
public void setTvLabel(String text) {
tvLabel.setText(text);
tvLabelFake.setText(text);
update();
}
public void setOnCopyContentListener(OnCopyContentListener onCopyContentListener) {
this.onCopyContentListener = onCopyContentListener;
}
public void showPopupWindow(View parent) {
if (!this.isShowing()) {
int[] location = new int[2];
parent.getLocationOnScreen(location);
// this.showAsDropDown(parent, 0, 0);
showAtLocation(parent, Gravity.NO_GRAVITY, location[0], location[1]);
} else {
this.dismiss();
}
}
public interface OnCopyContentListener {
void copyContent();
}
}
구체 적 인 사용 코드:
public class MainActivity extends AppCompatActivity {
TextView tvNickName;
TextView tvQQNum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvNickName = findViewById(R.id.tv_nick_name);
tvQQNum = findViewById(R.id.tv_qq_num);
tvNickName.setOnClickListener(v -> {
CopyContentPopWindow copyContentPopWindow = new CopyContentPopWindow(MainActivity.this);
copyContentPopWindow.setTvLabel(" ");
copyContentPopWindow.setOnCopyContentListener(() -> {
ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clipData = ClipData.newPlainText("Label", tvNickName.getText().toString());
cm.setPrimaryClip(clipData);
Toast.makeText(MainActivity.this, " ", Toast.LENGTH_LONG).show();
});
copyContentPopWindow.showPopupWindow(tvNickName);
});
tvQQNum.setOnClickListener(v -> {
CopyContentPopWindow copyContentPopWindow = new CopyContentPopWindow(MainActivity.this);
copyContentPopWindow.setTvLabel(" QQ ");
copyContentPopWindow.setOnCopyContentListener(() -> {
ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clipData = ClipData.newPlainText("Label", "100001");
cm.setPrimaryClip(clipData);
Toast.makeText(MainActivity.this, " ", Toast.LENGTH_LONG).show();
});
copyContentPopWindow.showPopupWindow(tvQQNum);
});
}
}
코드 다운로드 주소링크:https://pan.baidu.com/s/1jChJvQ9i6JrfFqwU3q1Mtg 비밀번호:lsf 7
기타 관련
동료 가 괜 찮 은 개원 프로젝트 를 찾 았 다.
총결산
위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 안 드 로 이 드 모 의 QQ 닉네임 복제 효과 입 니 다.여러분 께 도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.