gpt4 book ai didi

android - GestureListener 不适用于 android :autoLink ="email"

转载 作者:行者123 更新时间:2023-11-30 04:00:07 26 4
gpt4 key购买 nike

这是我的布局 xml 文件。

     ...
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/rlt" >

<TextView
android:id="@+id/title_text"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textSize="22dp"
android:layout_centerHorizontal="true"
android:textColor ="#add8e6"
/>

<TextView
android:id="@+id/description"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/tatle_text"
android:layout_marginTop="45dp"
android:textColor = "#e3e4fa"
android:autoLink="email"
android:textColorLink="#fdd017"
/>
...
...
...
...


这是我的 onFling() :

   SimpleOnGestureListener simpleOnGestureListener
= new SimpleOnGestureListener(){
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub

final float xDistance = Math.abs(e1.getX() - e2.getX());
final float yDistance = Math.abs(e1.getY() - e2.getY());

if(xDistance > gs.swipe_Max_Distance || yDistance > gs.swipe_Max_Distance)
return false;
Log.v("Help_developers", "Flinging baby!");
velocityX = Math.abs(velocityX);
velocityY = Math.abs(velocityY);
boolean result = false;

if(velocityX > gs.swipe_Min_Velocity && xDistance > gs.swipe_Min_Distance){
if(e1.getX() > e2.getX()) // right to left
{ //Slide to Help_app
Intent i=new Intent(Help_developers.this,Help_app.class);
startActivity(i);
finish();
}
else
{
//Slide to Help_qanda
Intent i=new Intent(Help_developers.this,Help_pending.class);
startActivity(i);
finish();
}

result = true;
}


return result;
}
});
final GestureDetector gestureDetector
= new GestureDetector(simpleOnGestureListener);
rlt.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View view, MotionEvent event) {
Log.d("test", "clicked!");
if(gestureDetector.onTouchEvent(event)) {
Log.d("test", "gesture detected");
return true;
}

return false;
}
});


rlt 是 RelativeLayout rlt 的 id。
现在 onFling() 中的 throw 不适用于 ID 为 description 的 TextView 中的 attribute android:autoLink="email"。但是,当我删除该属性时,一掷千金。我不知道为什么会这样。该属性如何影响 throw 手势?
编辑
GestureListener 本身的 onTouch() 不会被调用。日志永远不会记录在 logcat 中。当属性 android:autoLink="email"存在时。

完整布局 XML 文件:

  <?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >


<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/rlt" >

<TextView
android:id="@+id/title_text"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textSize="22dp"
android:layout_centerHorizontal="true"
android:textColor ="#ffffff"

/>

<TextView
android:id="@+id/description"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tatle_text"
android:layout_marginTop="45dp"
android:textColor = "#e3e4fa"
android:autoLink="email"
android:textColorLink="#fdd017"
android:
/>
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rlt_touch" />

<Button
android:id="@+id/Home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="@drawable/home"
android:text="Home"
/>

</RelativeLayout>

</ScrollView>

最佳答案

而不是像在我的 first answer 中那样关闭 TextView 中的触摸处理,我们可以添加一个透明 View (作为 RelativeLayout 最顶层的 subview )来捕获触摸事件,这样我们就可以有选择地将相关事件转发给 TextView,同时仍然获取所有事件来检测手势:

  • 修改 XML 布局,添加触摸捕获 View :

    ...
    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/rlt">

    <TextView
    android:id="@+id/title_text"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:textSize="22dp"
    android:layout_centerHorizontal="true"
    android:textColor="#add8e6"
    android:background="#ff0000" />

    <TextView
    android:id="@+id/description"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/title_text"
    android:layout_marginTop="45dp"
    android:textColor="#e3e4fa"
    android:textColorLink="#fdd017"
    android:autoLink="email" />

    <!-- our touch-capturing view -->
    <View
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/rlt_touch" />

    </RelativeLayout>
    ...
  • 修改 Java 代码,将我们的 OnTouchListener 设置为添加的 rlt_touch View 并添加事件转发代码:

    final View rt = findViewById(R.id.rlt_touch);
    final TextView tv = (TextView) findViewById(R.id.description);

    rt.setOnTouchListener(new OnTouchListener() {
    final Rect r = new Rect();
    final Point p1 = new Point();
    final Point p2 = new Point();

    @Override
    public boolean onTouch(View v, MotionEvent event) {
    Log.d("test", "clicked!");

    if (gestureDetector.onTouchEvent(event)) {
    Log.d("test", "gesture detected");
    }

    // offset touch location into the TextView and forward it if relevant
    rt.getGlobalVisibleRect(r, p2);
    tv.getGlobalVisibleRect(r, p1);
    event.offsetLocation(p2.x - p1.x, p2.y - p1.y);
    if (r.contains((int) event.getRawX(), (int) event.getRawY())) {
    tv.onTouchEvent(event);
    }

    return true;
    }
    });

关于android - GestureListener 不适用于 android :autoLink ="email",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12638512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com