安卓 实现 长按textview 显示弹窗,内容是textview的值,弹窗样式是半透明效果,长度固定,文字居中显示, 点击空白区域,关闭弹窗。
时间: 2023-10-23 13:10:44 浏览: 97
android textview 显示html方法解析
您可以参考以下代码实现:
1. 在布局文件中添加一个TextView:
```xml
<TextView
android:id="@+id/tv_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="长按弹窗"
android:textSize="16sp"
android:padding="10dp"
android:background="@drawable/selector_text_bg"
android:textColor="#333333"
android:clickable="true"
android:longClickable="true" />
```
2. 在drawable文件夹下创建selector_text_bg.xml文件,设置TextView的背景样式:
```xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/bg_text_pressed" />
<item android:state_focused="true"
android:drawable="@drawable/bg_text_focused" />
<item android:drawable="@drawable/bg_text_normal" />
</selector>
```
3. 在drawable文件夹下创建bg_text_pressed.xml、bg_text_focused.xml、bg_text_normal.xml文件,分别设置TextView的不同状态下的背景颜色和圆角:
```xml
<!-- bg_text_pressed.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#22FFFFFF" />
<corners android:radius="8dp" />
</shape>
<!-- bg_text_focused.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#11FFFFFF" />
<corners android:radius="8dp" />
</shape>
<!-- bg_text_normal.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FFFFFF" />
<corners android:radius="8dp" />
</shape>
```
4. 在Activity的onCreate方法中添加以下代码,实现长按TextView弹出半透明弹窗:
```java
final TextView tvText = findViewById(R.id.tv_text);
tvText.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// 创建弹窗
final PopupWindow popupWindow = new PopupWindow(MainActivity.this);
// 设置弹窗的宽度和高度
popupWindow.setWidth(tvText.getWidth());
popupWindow.setHeight(120);
// 设置弹窗的背景颜色和透明度
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#80000000")));
// 设置弹窗的内容
TextView tvContent = new TextView(MainActivity.this);
tvContent.setText(tvText.getText());
tvContent.setTextColor(Color.WHITE);
tvContent.setGravity(Gravity.CENTER);
popupWindow.setContentView(tvContent);
// 显示弹窗
popupWindow.showAsDropDown(tvText);
// 点击空白区域关闭弹窗
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
popupWindow.dismiss();
}
});
return true;
}
});
```
这样,当用户长按TextView时,就会弹出一个半透明弹窗,显示TextView的内容。当用户点击空白区域时,弹窗会自动关闭。
阅读全文