2013-06-11 6 views
2

android 개발자 페이지에서 onTouch는 API 레벨 1의 일부이며 API 레벨 17을 사용하고 있습니다. 비슷한 질문에 대한 다른 stackoverflow 응답은 응용 프로그램에 필요한 모든 패키지를 사용할 수 있도록 API 수준). 여기 오류 : 'android'패키지의 'onTouch'속성에 대한 리소스 식별자가 없습니다.

내 activity_main.xml 코드입니다 : 내가 눈치 무엇

package com.myfirstproject.test; 
import java.util.ArrayList; 

import client.*; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 
import android.app.Activity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.webkit.WebView; 
import android.widget.Button; 

public class MainActivity extends Activity { 
    public final static String EXTRA_MESSAGE = "com.myfirstproject.test.MESSAGE"; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 
    public void sendMessage(View view) { 
     Intent intent = new Intent(this, DisplayMessageActivity.class); 
     EditText editText = (EditText) findViewById(R.id.edit_message); 
     String message = editText.getText().toString(); 
     intent.putExtra(EXTRA_MESSAGE, message); 
     startActivity(intent); 
     } 
    public void listenTouch(View v,MotionEvent event){ 
     int x = (int)(event.getX()); 
     int y = (int)(event.getY()); 
     City tempCity = new City(x,y); 
     TourManager.addCity(tempCity); 
     //return true; 
    } 
    public void beginTSP(View v){ 
     Intent intent = new Intent(this, DisplayMessageActivity.class); 
     String message = "0"; 
     intent.putExtra(EXTRA_MESSAGE, message); 
     startActivity(intent); 
    } 
} 

가 있다는 것입니다 : 이것은 내 MainActivity.Java 코드가

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:paddingLeft="16dp" 
    android:paddingRight="16dp"> 
    <ImageView 
     android:id="@+id/myimage" 
     android:layout_width="500dp" 
     android:layout_height="500dp" 
     android:layout_alignLeft="@+id/edit_message" 
     android:layout_alignParentTop="true" 
     android:src="@drawable/graph" 
     android:onTouch="listenTouch"/> 

    <EditText 
     android:id="@+id/edit_message" 
     android:layout_width="200dp" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:hint="@string/edit_message" > 

     <requestFocus /> 
    </EditText> 

    <!-- <Button 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/button_send" 
     android:onClick="sendMessage" 
     android:layout_toLeftOf= "@id/edit_message"/> --> 
<!-- <Button 
     android:id="@+id/btnChangeImage" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Change Image" /> --> 

    <Button 
     android:id="@+id/button1" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:text="@string/button_send" 
     android:onClick="sendMessage"/> 



    <Button 
     android:id="@+id/button2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="18dp" 
     android:text="Submit Points" 
     android:onClick="beginTSP"/> 

</RelativeLayout> 

<!-- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:paddingLeft="16dp" 
    android:paddingRight="16dp" > 

</RelativeLayout> --> 

입니다 (첫 번째 이미지 뷰가 오류가있는 일입니다) "onTouch"를 "onClick"으로 변경하면 오류가 사라집니다 (onClick은 arg로 MotionEvent를 사용하는 listenTouch를 호출하지만 onClick은 View로 arg 만 허용하므로 다른 오류가 발생 함).

필자는 SDK를 업데이트했으며, 17 개로 min API를 설정하고 17 개로 대상 API를 설정했습니다. 또한 Android 4.2.2를 사용하고 있는지 확인했습니다 (프로젝트를 마우스 오른쪽 버튼으로 클릭했을 때 클릭 함 "속성을 선택한 다음 Android를 클릭합니다. Android 4.2.2가 선택되었습니다.)

내 컴파일러 준수 수준은 1.6입니다. 재미있게 변경하려고하면"Android는 컴파일러 준수 5.0을 원합니다. 6.0, 당신의 1.7 "(그것보다 공식적으로,하지만 그것은 기본적으로 말했다), 그래서 내 컴파일러 준수를 1.7 업데이트 할 수 없지만이 왜 onTouch 제대로 작동하지 않는 원인이 표시되지 않습니다?

유용 할 경우 다음은 Android Man입니다. ifest 파일 :

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.myfirstproject.test" 
    android:versionCode="1" 
    android:versionName="1" > 
    <uses-sdk 
     android:minSdkVersion="17" 
     android:targetSdkVersion="17" /> 
    <uses-permission android:name="android.permission.INTERNET"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.myfirstproject.test.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name="com.myfirstproject.test.DisplayMessageActivity" 
      android:label="@string/title_activity_display_message" 
      android:parentActivityName="com.myfirstproject.test.MainActivity" > 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="com.myfirstproject.test.MainActivity" /> 
     </activity> 
    </application> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <WebView android:id="@+id/pic_view" 
       android:layout_width="fill_parent" 
       android:layout_height="0dp" 
       android:layout_weight="1" > 
     </WebView> 
    </LinearLayout> 

</manifest> 

감사합니다!

답변

1

android:onTouch 속성이 없습니다. setter 메서드 setOnTouchListener으로 모든 뷰에 쉽게 추가 할 수있는 OnTouchListener을 사용하면 충분합니다. 귀하의 경우에는

: 속성이 존재하지 않는

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    findViewById(R.id.myimage).setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch (View v, MotionEvent event) { 
      int x = (int)(event.getX()); 
      int y = (int)(event.getY()); 
      City tempCity = new City(x,y); 
      TourManager.addCity(tempCity); 
      return true; 
     } 
    }); 
} 
+0

대단히 감사합니다! btw, 내가 제안한 onTouch에 "return true"를 추가했는데, 맞습니까? –

+0

작동하는 것 같습니다. 다시 감사합니다. –

+1

오, 그래, 나는 그것을 놓쳤다. 반환 값으로 true는 이벤트를 "소비"했음을 의미하며이 터치 이벤트를 다른보기/활동에 위임해서는 안됩니다. – WarrenFaith

0

은, 그것은 SDK 또는 수준과는 아무 상관 없습니다. 이벤트가 처리 되었으면 true이고, 그렇지 않으면 false입니다.

관련 문제