如何在ScrollView中完全设置edittext?

时间:2014-04-18 19:47:25

标签: android android-layout android-edittext android-xml android-scrollview

在详细介绍我遇到的问题之前,我对Android开发很新,所以让我先解释一下我想要实现的目标以及我试图做的事情。

我正在使用android 4.0操作系统在eclipse IDE中创建一个Android应用程序,我想在这个应用程序中创建的是一个窗口滚动视图,其中包含各种不同的小部件,如复选框,文本视图和编辑文本。这些编辑文本是必需的,以便用户可以输入关于在应用页面上的图像视图中显示但不在滚动视图内的图像的一些数据。然后用户按下按钮,然后将数据存储在某处(我知道我想用它做什么)并且会出现一个新图像,然后重复该过程。

现在为了创建一个窗口滚动视图,我知道您需要在滚动视图中定义小部件并能够正确向下滚动它们是通过在线性布局中定义它们然后弄乱边缘顶部活动xml文件中每个小部件中的值。

然而,一旦我创建这些小部件尝试测试,这就是我遇到一些问题的地方。

首先,如果一个小部件放在页眉和页脚之间(应用程序页面上显示的区域,并用作窗口滚动视图的一部分),我尝试测试滚动,滚动工作,但它创建一个随机该小部件的副本,我无法摆脱,例如http://community.dur.ac.uk/cs.seg05/androidapp/exhibit_A.JPG(我无法直接向您显示图像,因为我的排名不够高,无法在StackOverflow上显示图像)

为了尝试解决这个问题,我决定将所有内容移动到scrollview的页脚下方,然后从那里向上滚动,这似乎有效。

不幸的是,当我尝试在我的编辑文本中测试输入时,我遇到了另一个恼人的问题。

当我完成输入编辑文本并单击软键盘上的下一个按钮时,应用程序将我引导到另一个我未定义的编辑文本并显示另一个软键盘,这反过来又创建了一个副本当前显示在scrollview窗口内的窗口小部件(包括该编辑文本)。 (我已向上滚动以获取此编辑文本)例如 https://community.dur.ac.uk/cs.seg05/androidapp/test.JPG

然后,我查看了诸如Scrolling EditText on ScrollView programmaticallyHow to prevent auto scrolling of EditText when keyboard appears on Android?Enable Scrolling within EditText that is in a ScrollView

等问题

但这些都没有真正帮助我。

我也尝试使用AutoTextCompleteView小部件作为用户woudl用作输入的小部件,但我不完全理解它们是如何工作的,我无法从它们那里获取任何数据,因为当我输入内容时,程序返回没有输入任何内容。

我真的很感激一些帮助,因为我不知道我是否遗漏了什么,或者我是否没有正确设置小部件,或者我没有正确设置滚动视图所以如果你们中有人有对这些问题的任何解决方案,请发布它们(代码或一步一步会非常有帮助)。

这是我的活动中的java代码(请注意,这是第一个活动完成后启动的第二个活动)。

 package com.example.hello;

import android.app.Activity;
import android.app.ActionBar;
import android.app.AlertDialog;
import android.app.Fragment;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import android.os.Build;
import android.widget.AdapterView.OnItemClickListener;




import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.util.*;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;
public class SecondActivity extends Activity {
    private String userId; //global variable as it will be used throughout this activity
    private ArrayList <String> imageNames;
    private String directory="http://community.dur.ac.uk/cs.seg05/Wild/CameraImages/";
    private int imageNumber=0;
    private CheckBox humanTest;
    private ArrayList<String> pictureIds;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        Bundle data = getIntent().getExtras(); //obtains information passed from the previous activity
        userId= data.getString("userId"); //gets the user id from the main activity
        System.err.println("Received User  id " +userId);




        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment()).commit();
        }
        imageNames =getImages(userId); //gets all of the image names from the database
        System.err.println(imageNames);

         getNextImage(imageNumber, imageNames); //method that obtains the next image


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.second, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.activity_second,
                    container, false);
            return rootView;
        }
    }


    public ArrayList<String> getImages(String userid) { // method that gets images from a php file
        ArrayList<String> images= new ArrayList<String>();
        pictureIds= new ArrayList<String> ();

        try {
            HttpClient httpclient= new DefaultHttpClient();
            URI website= new URI("https://community.dur.ac.uk/cs.seg05/androidapp/ImageAccess.php?userid="+userid);
            HttpGet request= new HttpGet();
            request.setURI(website);

            HttpResponse response = httpclient.execute(request);

            BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
            StringBuffer sb=new StringBuffer("");
            String l= "";
            String nl= System.getProperty("line.separator");

            while ((l = reader.readLine()) != null) { //converts the whole output into a string 
                sb.append(l+ nl);
        }
            reader.close();
            String result=sb.toString();






                JSONArray jArray = new JSONArray(result);
                System.err.println(jArray.length());
                for(int i=0;i<jArray.length();i++){ //retrieves the JSon
                        JSONObject json_data = jArray.getJSONObject(i);
                        System.err.println(json_data);
                        images.add(json_data.getString("File_Name"));
                        pictureIds.add(json_data.getString("Picture_ID"));
                }  


            }
            catch (Exception e) {
                System.err.println(e);
            }


        return images;


    }

     public static Bitmap getBitmapFromURL(String src) {
            try {
                java.net.URL url = new java.net.URL(src);
                HttpURLConnection connection = (HttpURLConnection) url
                        .openConnection();
                connection.setDoInput(true);
                connection.connect();
                InputStream input = connection.getInputStream();
                Bitmap myBitmap = BitmapFactory.decodeStream(input);
                return myBitmap;
            } catch (IOException e) {
                e.printStackTrace();
                return null;
            }

        }






     public void getNextImage(int number, ArrayList<String> images) { //method that gets the images
         if (number>=images.size()) {
             String whitespace="http://www.skettymethodistchurch.org.uk/whitespace.jpg" ; //whitespace for when user has finished the subset of images
             Bitmap bm= getBitmapFromURL(whitespace);
                ImageView iv= (ImageView)findViewById(R.id.imageView1); //gets the image view
                iv.setImageBitmap(bm);
         }
         else {
             String image=images.get(number);
             String request=directory+image;
             Bitmap bm= getBitmapFromURL(request);
             ImageView iv= (ImageView)findViewById(R.id.imageView1); //gets the image view
            iv.setImageBitmap(bm);
            imageNumber++;

         }
     }

     public void loadNextImage(View view) { //method for when the next button is clicked
         try {
        // humanTest = (CheckBox) findViewById(R.id.checkBox1);




             ImageView iv= (ImageView)findViewById(R.id.imageView1); //gets the image view

             iv.setImageBitmap(null);
             getNextImage(imageNumber, imageNames);
         }



         catch (Exception e) {
             System.err.println(e);
         }
}



     public void LoadHelpActivity(View view) {
         Intent i = new Intent(getBaseContext(), HelpActivity.class);
         startActivity(i);
     }

     public void getScore(View view) {
         AlertDialog alertDialog = new AlertDialog.Builder(this).create();
     }

}

以下是与此活动相关联的xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:id="@+id/container"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context="com.example.hello.SecondActivity"
    tools:ignore="MergeRootFrame" >  


             <ImageView
                 android:id="@+id/imageView1"
                 android:layout_width="315dp"
                 android:layout_height="150dp"
                 android:layout_alignParentRight="true"
                 android:layout_alignParentTop="true"
                 android:layout_marginTop="38dp" />

 <!-- Header aligned to top --> 
  <RelativeLayout
                 android:id="@+id/header"
                 android:layout_width="315dp"
                 android:layout_height="35dp"
                 android:layout_alignParentRight="true"
                 android:layout_centerVertical="true"
                 android:gravity="center" >

                 <TextView
                     android:layout_width="355dp"
                     android:layout_height="25dp"
                     android:layout_marginTop="0dp"
                     android:text="Scroll up to classify the contents of the image"
                     android:textColor="#000"
                     android:textSize="14sp" />
             </RelativeLayout>

  <!-- Footer aligned to bottom -->
  <RelativeLayout
    android:id="@+id/footer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:gravity="center" >

    <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_margin="5dp"
     />
  </RelativeLayout>


  <ScrollView
     android:id="@+id/scrollableContents" 
     android:layout_width="fill_parent"
     android:layout_height="match_parent"
     android:layout_above="@id/footer"
     android:layout_below="@id/header"
      android:isScrollContainer="false"
      android:fillViewport="true"
     >


    <LinearLayout

      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:gravity="center_horizontal"
      android:orientation="vertical" >



             <CheckBox
                 android:id="@+id/checkBox1"
                 android:layout_width="150dp"
                 android:layout_height="wrap_content"
                 android:layout_alignParentTop="true"
                 android:layout_centerHorizontal="true"

                 android:layout_marginTop="100dp"

                 android:text="Humans in image" />




            <EditText
            android:id="@+id/EditText01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
           android:inputType="text"
            android:layout_marginTop="30dp"
            android:ems="13"




        />





              <Button
                 android:id="@+id/button1"
                 android:layout_width="95dp"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="30dp"

                 android:layout_centerHorizontal="true"           
                 android:onClick="loadNextImage"
                 android:text="@string/classify" />



</LinearLayout>

  </ScrollView>

  <Button
      android:id="@+id/button2"
      android:layout_width="wrap_content"
      android:layout_height="40dp"
      android:layout_alignParentRight="true"
      android:layout_alignParentTop="true"
      android:onClick="LoadHelpActivity"
      android:text="Help" />

  <Button
      android:id="@+id/button3"
      android:layout_width="wrap_content"
      android:layout_height="40dp"
      android:layout_alignLeft="@+id/imageView1"
      android:layout_alignParentTop="true"
      android:layout_marginLeft="22dp"
      android:onClick="getScore"
      android:text="Check score" />

</RelativeLayout>

最后,这是android清单:

  <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.hello"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="14" />

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

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.hello.SecondActivity"
            android:label="Wild Eyes" >
        </activity>
        <activity
            android:name="com.example.hello.HelpActivity"
            android:label="Wild Eyes" >
        </activity>
    </application>

</manifest>

如果有什么我错过了并且这将是有益的,请告诉我,我会发布。

由于

汤姆

0 个答案:

没有答案