gpt4 book ai didi

android - 以编程方式添加 TextView 时,setOnFocusChangeListener 不起作用

转载 作者:行者123 更新时间:2023-12-05 07:55:43 27 4
gpt4 key购买 nike

当我尝试以编程方式添加 TextView 时,我无法设置 setOnFocusChangeListener 甚至 setOnClickListener

我试过了

txt1.requestFocus();
txt1.setFocusable(true);
txt1.setFocusableInTouchMode(true);

txt1.setClickable(true);

setOnTouchListener 正在工作,但其他监听器没有。这是我的代码:

text_b.setOnClickListener(new View.OnClickListener() 
{
@Override
public void onClick(View view)
{
try
{
TextView txt1 = new TextView(DashActivity.this);

txt1.setText("This is me");
txt1.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18);
txt1.setTextColor(Color.parseColor("#FAC421"));
txt1.requestFocus();
txt1.setFocusable(true);
txt1.setFocusableInTouchMode(true);
txt1.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
try
{
Log.i("txt: ", "Clicked");
}
catch (NullPointerException e)
{
e.printStackTrace();
}
}
});

txt1.setOnFocusChangeListener(new View.OnFocusChangeListener()
{
@Override
public void onFocusChange(View v, boolean hasFocus)
{
Log.i("txt:" , "Changed");

if(hasFocus)
{
v.setBackgroundResource(R.drawable.text_border);
}
else
{
v.setBackgroundResource(0);
}
}
});

txt1.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_MOVE)
{
// Offsets are for centering the TextView on the touch location
v.setX(event.getRawX());
v.setY(event.getRawY());
}

return true;
}
});

mRrootLayout.addView(txt1);
}
catch (NullPointerException e)
{
e.printStackTrace();
}
}
});

有什么解决办法吗?

最佳答案

View.OnTouchListeneronTouch 方法中返回 false 而不是 true。当您返回 true 时,您将此触摸事件标记为已处理,因此此触摸事件不会进一步传播(到 OnClickListener 和 OnFocusChangeListener)。

关于android - 以编程方式添加 TextView 时,setOnFocusChangeListener 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29402678/

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