Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于LinearLayout的onTouch()函数不';行不通_Java_Android_Android Studio - Fatal编程技术网

Java 用于LinearLayout的onTouch()函数不';行不通

Java 用于LinearLayout的onTouch()函数不';行不通,java,android,android-studio,Java,Android,Android Studio,我有文件第一级,用户从主文件(mainActivity)进入。当用户触摸屏幕时,我需要在FirstLevel中将LinearLayouts添加到屏幕中(这些LinearLayouts包含两个文本视图,并在单独的XML文件中实现)。但是,事实上,什么也没发生,我没有看到任何额外的线性布局 公共类第一级扩展AppCompatActivity实现View.OnTouchListener{ 图像按钮第一个按钮; //布尔标志=真; 字符串[]replics={…};//填充体量 字符串[]who={…}

我有文件第一级,用户从主文件(mainActivity)进入。当用户触摸屏幕时,我需要在FirstLevel中将LinearLayouts添加到屏幕中(这些LinearLayouts包含两个文本视图,并在单独的XML文件中实现)。但是,事实上,什么也没发生,我没有看到任何额外的线性布局

公共类第一级扩展AppCompatActivity实现View.OnTouchListener{
图像按钮第一个按钮;
//布尔标志=真;
字符串[]replics={…};//填充体量
字符串[]who={…};
int i=0;
@SuppressLint(“ClickableViewAccessibility”)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局第一层);
LinearLayout gameWindow=findViewById(R.id.mesWin);
gameWindow.setOnTouchListener(这个);
}
void npcsay(字符串文本、字符串英雄)
{
LinearLayout gameWindow=findViewById(R.id.mesWin);
LinearLayout视图=(LinearLayout)getLayoutInflater().充气(R.layout.message,gameWindow,false);
TextView用户名=view.findviewbyd(R.id.name);
username.setText(英雄);
TextView ttxt=view.findViewById(R.id.point);
ttxt.setText(文本);
gameWindow.addView(视图,新的LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_父级,ViewGroup.LayoutParams.WRAP_内容));
}
@SuppressLint(“ClickableViewAccessibility”)
@凌驾
公共布尔onTouch(视图v,运动事件){
if(event.getAction()==MotionEvent.ACTION\u向下){
npcsay(回复[i],世卫组织[i]);
i++;
返回true;
}
返回false;
}
}
First_level.xml


message.xml


这就是第一级XML的样子


使用“ViewGroup.addView(child,LayoutParams)”而不是“addView()”通常是一种很好的做法,尤其是当XML布局将主视图组设置为“宽度/高度:匹配父视图”时。实际上,分配给任何膨胀视图(使用“addView(子)”的默认布局参数对于宽度和高度都是“包裹内容”,这样膨胀视图就无法很好地测量,其尺寸将为[0,0]

请检查您的XML布局文件:它应该可以从自己的角度测量(换句话说,它不应该取决于父视图的宽度/高度)。如果它应该取决于父视图的视图组,那么您不能使用“addView(child)”,但您需要

  • addView(子对象,新的LinearLayout.LayoutParams(…,…)
根据你的观点


如果您不确定,请发布您的XML“R.layout.message”文件。

我发现了您的问题。
您将onTouchListener设置为LinearLayout(R.id.mesWin)。
但LinearLayout的大小为0。(因为您将其大小设置为包裹内容
所以你可以用两种方法来修复它

第一种方法:
您可以将TouchListener更改为gameWindow

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.first_level);
    View gameWindow = findViewById(R.id.gameWindow);
    gameWindow.setOnTouchListener(this);
}
第二种方法:

您可以更改线性布局(mesWin)的高度。
因此,您需要向ScrollView添加fillViewport=“true”选项

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/gameWindow"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/fillback"
    android:orientation="vertical"
    tools:context=".MainActivity"
    android:fillViewport="true">

    <LinearLayout
        android:id="@+id/mesWin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" />

</ScrollView>


非常感谢!正如您所说,我编辑了我的文件,但它仍然不起作用,我相信问题在于与函数onTouch()的绑定,因为当我只是将linearLayout添加到主linearLayout(不带onTouch)时,一切都可以正常工作Nope,onTouch()不能破坏任何东西,因为它像其他活动方法一样在Main/UiThread中运行。我认为在“其他地方”它的工作主要是幸运的,而不是因为它是正确的方式。编程是可靠的/稳定的,并且“有时”或“只有在我将代码放在这里时”无法工作……很好@emandt,我明白了!请检查XML“消息”好吗我发布的文件?似乎我编辑的文件不正确(1)“fill_parent”是弃用的/多年来不再使用的旧属性值。请将其替换为“match_parent”。(2)您是否在正确的位置和正确的宽度/高度看到ScrollView“fillblack”背景?(如果可以,发布结果视图的图片)(1)修复!(2)我相信一切都很好,上传了图片hi,你能发布first_level.xml文件吗,这样我就可以调试你的问题了。嗨,@Daniel.Wang,成功了!更新了我的答案,请检查一下。将来:请不要以使现有答案无效的方式编辑问题。改为问新问题。尝试了,但没有改变。嗨,更新了答案。请检查一下。