键盘上的AutoCompleteTextView

时间:2016-11-29 12:43:13

标签: android autocomplete textview autocompletetextview

我在显示项目下拉菜单时遇到问题,它会弹出键盘下方,如附图所示。

有没有办法显示键盘上的下拉菜单?

enter image description here

已编辑,已添加代码。

XML文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingBottom="5dp"
android:paddingTop="5dp"
android:background="#ffffff"
android:orientation="vertical" >

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:textSize="16dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_dateText"
            android:textStyle="bold|italic"
            android:text="Data" />

        <TextView
            android:textSize="@dimen/listview_size_font_textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_date"
            android:text=""
            android:layout_gravity="right" />

        <TextView
            android:textSize="16dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_saleText"
            android:textStyle="bold|italic"
            android:text="Pedido" />

        <TextView
            android:textSize="@dimen/listview_size_font_textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_saleNumber"
            android:text=""
            android:layout_gravity="right" />

        <TextView
            android:textSize="16dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_clientText"
            android:textStyle="bold|italic"
            android:text="Cliente" />

        <AutoCompleteTextView
            android:hint="Busque pelo cliente"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:windowSoftInputMode="stateHidden|adjustPan"
            android:dropDownHeight="500dp"
            android:id="@+id/ac_client" />

        <TextView
            android:textSize="16dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_fpaymentText"
            android:textStyle="bold|italic"
            android:text="Forma de pagamento" />

        <AutoCompleteTextView
            android:hint="Busque pela forma"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:windowSoftInputMode="stateHidden|adjustPan"
            android:dropDownHeight="100dp"
            android:id="@+id/ac_fpayment" />

        <TextView
            android:textSize="16dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_paymentText"
            android:textStyle="bold|italic"
            android:text="Condição de pagamento" />

        <AutoCompleteTextView
            android:hint="Busque pela condição"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:windowSoftInputMode="stateHidden|adjustPan"
            android:dropDownHeight="100dp"
            android:id="@+id/ac_payment" />

        <TextView
            android:textSize="16dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tv_obsText"
            android:textStyle="bold|italic"
            android:text="Forma de pagamento" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPersonName"
            android:hint="Observação"
            android:id="@+id/tv_obs" />

    </LinearLayout>

</ScrollView>

AutoCompleteAdapter

public class AutoCompleteAdapter extends ArrayAdapter<ACObject> {
    Context context;
    int resource, textViewResourceId;
    List<ACObject> items, tempItems, suggestions;

    public AutoCompleteAdapter(Context context, int resource, int textViewResourceId, List<ACObject> items) {
        super(context, resource, textViewResourceId, items);

        Log.e("Adapter", "items -> "+items);

        this.context = context;
        this.resource = resource;
        this.textViewResourceId = textViewResourceId;
        this.items = items;
        tempItems = new ArrayList<ACObject>(items); // this makes the difference.
        suggestions = new ArrayList<ACObject>();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(resource, parent, false);
        }
        ACObject object = items.get(position);
        if (object != null) {
            TextView lblName = (TextView) view.findViewById(textViewResourceId);
            if (lblName != null)
                lblName.setText(object.getName());
        }
        return view;
    }

    @Override
    public Filter getFilter() {
        return nameFilter;
    }

    Filter nameFilter = new Filter() {
        @Override
        public CharSequence convertResultToString(Object resultValue) {
            String str = ((ACObject) resultValue).getName();
            return str;
        }

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            if (constraint != null) {
                suggestions.clear();
                for (ACObject object : tempItems) {
                    if (object.getName().toLowerCase().contains(constraint.toString().toLowerCase())) {
                        suggestions.add(object);
                    }
                }
                FilterResults filterResults = new FilterResults();
                filterResults.values = suggestions;
                filterResults.count = suggestions.size();
                return filterResults;
            } else {
                return new FilterResults();
            }
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            List<ACObject> filterList = (ArrayList<ACObject>) results.values;
            if (results != null && results.count > 0) {
                clear();
                for (ACObject object : filterList) {
                    add(object);
                    notifyDataSetChanged();
                }
            }
        }
    };
}

ACObject

public class ACObject {
    public int id;
    public String code;
    public String name;

    public ACObject(int id, String code, String name) {
        this.id = id;
        this.code = code;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

NewSalesTabInfo

public class NewSalesTabInfo extends Fragment {

    private String saleNumber = "";

    List<ACObject> mListClient;
    List<ACObject> mListPayment;
    AutoCompleteAdapter adapter;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        saleNumber = getArguments().getString("requestNumber");

        View v = View.inflate(getContext(), R.layout.new_sales_tab_info, null);

        Calendar c = Calendar.getInstance();
        SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
        String date = df.format(c.getTime());

        TextView tv_saleDate            = (TextView)v.findViewById(R.id.tv_date);
        TextView tv_saleNumber          = (TextView)v.findViewById(R.id.tv_saleNumber);
        AutoCompleteTextView ac_client  = (AutoCompleteTextView)v.findViewById(R.id.ac_client);
        AutoCompleteTextView ac_payment = (AutoCompleteTextView)v.findViewById(R.id.ac_payment);

        tv_saleDate.setText(date);
        tv_saleNumber.setText(saleNumber);

        mListClient = retrieveClients();
        ac_client.setThreshold(1);
        adapter = new AutoCompleteAdapter(getContext(), R.layout.autocomplete_list, R.id.tv_name, mListClient);
        ac_client.setAdapter(adapter);

        mListPayment = retrievePayment();
        ac_payment.setThreshold(1);
        adapter = new AutoCompleteAdapter(getContext(), R.layout.autocomplete_list, R.id.tv_name, mListPayment);
        ac_payment.setAdapter(adapter);

        return v;
    }

    private List<ACObject> retrieveClients() {
        List<ACObject> list     = new ArrayList<ACObject>();
        DBController dbCtrl     = new DBController(getContext());
        String[] fieldTable     = {"id", "A1_COD", "A1_NOME"};
        Cursor dbClients        = dbCtrl.selectAllData("SA1", fieldTable);

        while (dbClients.moveToNext()) {
            list.add(new ACObject(dbClients.getInt(dbClients.getColumnIndex("id")), dbClients.getString(dbClients.getColumnIndex("A1_COD")), dbClients.getString(dbClients.getColumnIndex("A1_NOME"))));
        }

        return list;
    }

    private List<ACObject> retrievePayment() {
        List<ACObject> list     = new ArrayList<ACObject>();
        DBController dbCtrl     = new DBController(getContext());
        String[] fieldTable     = {"id", "E4_CODIGO", "E4_DESCRI"};
        Cursor dbPayment        = dbCtrl.selectAllData("SE4", fieldTable);

        while (dbPayment.moveToNext()) {
            list.add(new ACObject(dbPayment.getInt(dbPayment.getColumnIndex("id")), dbPayment.getString(dbPayment.getColumnIndex("E4_CODIGO")), dbPayment.getString(dbPayment.getColumnIndex("E4_DESCRI"))));
        }

        return list;
    }
}

1 个答案:

答案 0 :(得分:0)

当我从android清单中取出adjustNothing时,我的问题就解决了。