2017-05-03 4 views
1

J'ai un fragment de dialogue plein écran avec un Spinner et un Tablelayout. Je peux ajouter des éléments au tablelayout en sélectionnant une option du Spinner. Ces éléments sont des vues de cartes qui sont gonflées dans le tablelayout (ne discutons pas pourquoi j'ai choisi ceci au lieu de recyclerview ou listview) J'ai deux problèmes numéro un: les vues ne correspondent pas avec sa largeur parent (il y a un espace vide à la droite de chaque élément)chevauchement de clavier Modifier le texte sur le tablelayout

numéro deux: Chaque élément du tablelayout possède un champ de texte Modifier. Si j'ajoute plusieurs éléments, le clavier chevauche les derniers édits. Comment puis-je résoudre ces problèmes? Je beggining android

keyboard overlaps ici est mon code Dialog_search_contract.java

public class Dialog_search_contract extends DialogFragment { 

    //private Arraylist<> 
    private static final String TAG = "AKDialogFragment"; 
    private View view_search; 
    private TableLayout tabla; 
    private Dialog_manager dm=Dialog_manager.getDialog_manager(); 
    private TableRow fila; 
    private final TableRow.LayoutParams layoutFila = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT); 
    private final TableRow.LayoutParams layout_celda = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT); 

    boolean flags[]; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     if (getActivity()instanceof Comercial) { 
      view_search = inflater.inflate(R.layout.search_contract_comercial, container, false); 
     } 
     else{ 
      view_search = inflater.inflate(R.layout.search_contract, container, false); 

     } 


     tabla = (TableLayout) view_search.findViewById(R.id.table_search); 
     tabla.setLayoutParams(layout_celda); 

     Toolbar toolbar = (Toolbar) view_search.findViewById(R.id.toolbar_search_contract); 
     toolbar.setTitle("Buscar contrato"); 
     ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar); 
     ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); 
     if (actionBar != null) { 
      actionBar.setDisplayHomeAsUpEnabled(true); 
      actionBar.setHomeButtonEnabled(true); 
      actionBar.setHomeAsUpIndicator(android.R.drawable.ic_menu_close_clear_cancel); 
     } 
     setHasOptionsMenu(true); 

     Spinner opcion = (Spinner) view_search.findViewById(R.id.spinner); 
     ArrayAdapter<CharSequence> staticAdapter = ArrayAdapter 
       .createFromResource(view_search.getContext(), R.array.contract_search, 
         android.R.layout.simple_spinner_item); 

     // Specify the layout to use when the list of choices appears 
     staticAdapter 
       .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     // Apply the adapter to the spinner 
     opcion.setAdapter(staticAdapter); 
     opcion.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, 
             int position, long id) { 
       addCriteria(position); 

      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 

      } 
     }); 

     return view_search; 
    } 


    public void addCriteria(int position) { 

      Filtro_contract aux= getOption(position); 
      View tr= createView(aux,position); 
      addTextField(aux,tr); 
      addRemoveButton(tr); 
      addSpinner(aux,tr); 
      addOptionText(aux,tr); 

      tabla.addView(tr); 

     } 


    private View createView(Filtro_contract filter, int position) { 
     LayoutInflater inflater; 
     View tr = null; 
       inflater=LayoutInflater.from(view_search.getContext()); 
       tr = inflater.inflate(R.layout.cardview_search, null,false); 
     tr.setId(position); 
     tr.setLayoutParams(layoutFila); 

     return tr; 
    } 


    @NonNull 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     Dialog dialog = super.onCreateDialog(savedInstanceState); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

     return dialog; 
    } 

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     menu.clear(); 
     getActivity().getMenuInflater().inflate(R.menu.search_contract_menu, menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 

     if (id == R.id.action_search) { 

      sendQuery(); 
      return true; 
     } else if (id == android.R.id.home) { 

      dismiss(); 
      dm.closeDialog(); 
      Log.d("--","Se ha cerrado el dialogo Dialog_search_contract"); 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    private void sendQuery() { 
     Context context=getActivity(); 
     Contract_query_instance.setContract_query_instance(generateQuery()); 

     if (getActivity()instanceof Comercial) { 
      Intent i = new Intent(context, Result_contract.class); 
      context.startActivity(i); 
     } 
     else{ 
      ((Result_contract)getActivity()).load_data(); 
     } 


     dm.closeDialog(); 
     dismiss(); 
    } 

    public Contract_query generateQuery() 
    { ArrayList<Contract_condition> condiciones= new ArrayList<Contract_condition>(); 

     for (int i = 0; i < tabla.getChildCount(); i++) { 
      View criterio= tabla.getChildAt(i); 
      int id=criterio.getId(); 
      Filtro_contract filtro=getOption(id); 

      Spinner sp=(Spinner)criterio.findViewById(R.id.spinner); 
      int cond=sp.getSelectedItemPosition(); 
      Compare compare= getCompare(cond,filtro); 


      EditText txt= (EditText)criterio.findViewById(R.id.texto); 
      String texto= String.valueOf(txt.getText()); 



      if ((!sonEspacios(texto)&& texto!=null) 
        || compare==Compare.NOT_STABLISHED 
        || compare==compare.STABLISHED) { 

       //Reemplaza varios espacios por uno y elimina los del comienzo y el final 
       String text = texto.replaceAll(" +", " ").trim(); 
       if (filtro==Filtro_contract.SIGNING_DATE||filtro==Filtro_contract.DUE_DATE) 
       { 

        Date fecha= FormatDate.parse_from_dd_MM_yy(text); 
        text=FormatDate.format_to_yyyy_MM_dd(fecha); 
       } 

       condiciones.add(new Contract_condition(filtro, compare, text)); 
      } 
     } 
     Contract_query qry= new Contract_query(condiciones); 
     Log.d("Se ha generado la ","consulta"); 
      return qry; 
    } 
} 

search_contract.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    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:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    android:background="@android:color/background_light"> 

    <android.support.design.widget.AppBarLayout 

     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay" 
     android:fitsSystemWindows="false" > 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar_search_contract" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" 
      /> 

    </android.support.design.widget.AppBarLayout> 

    <LinearLayout 
     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:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#ffffff" 
     android:orientation="vertical" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Agregar Condición" 
      android:id="@+id/agregarCondicionText" /> 

     <Spinner android:text="@string/opcion" 
      android:id="@+id/spinner" 
      android:layout_width="200dp" 
      android:layout_height="wrap_content" 
      /> 




    <ScrollView 
     android:id="@+id/scrollvertical_search_contract" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:scrollbars="vertical" 
     android:layout_weight="1"> 

     <HorizontalScrollView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/scrollhorizontal_search_contract" 
      android:scrollbars="horizontal" 
      android:layout_weight="1"> 
      <LinearLayout 
       android:orientation="vertical" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"> 
       <TableLayout android:id="@+id/table_search" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:stretchColumns="1"> 
       </TableLayout> 
      </LinearLayout> 
     </HorizontalScrollView> 

    </ScrollView> 



    </LinearLayout> 

</android.support.design.widget.CoordinatorLayout> 

cardview_search.xml

**

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:layout_width="wrap_content" 
    android:layout_height="120dp" 
    card_view:cardCornerRadius="4dp" 
    card_view:cardElevation="4dp" 
    card_view:cardUseCompatPadding="true"> 
    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="@style/cardview_header" 
      android:text="filtro" 
      android:id="@+id/filtro" 
      android:layout_marginBottom="5dp" 
      android:layout_alignParentTop="true" 
      android:layout_marginLeft="10dp" /> 
     <ImageButton 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/boton_cerrar" 
      android:src="@drawable/ic_close_box" 
      android:layout_alignParentTop="true" 
      android:background="@null" 
      android:layout_alignParentRight="true"/> 
     <Spinner android:text="@string/opcion" 
      android:id="@+id/spinner" 
      android:layout_width="150dp" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/linea" 
      android:layout_marginRight="5dp" 
      /> 
     <EditText 
      android:id="@+id/texto" 
      android:layout_width="100dp" 
      android:gravity="end" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/spinner" 
      android:layout_marginEnd="10dp" 
      android:layout_alignTop="@id/spinner" 
      android:layout_toRightOf="@id/spinner" 
      android:layout_marginRight="10dp" 
      /> 
     <View 
      android:layout_width="wrap_content" 
      android:layout_height="1dp" 
      android:background="#ffd5d5d5" 
      android:id="@+id/linea" 
      android:layout_below="@+id/filtro" 
      android:layout_marginBottom="5dp"></View> 
     <!--ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/estado" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentRight="true" 
      /--> 
    </RelativeLayout> 
</android.support.v7.widget.CardView> 

**

+0

Pour l'espace vide, vous définissez vous-même la largeur 'android: layout_width = "150dp"'. Essayez peut-être de paramétrer la mise en page parent et enfant à 'match_parent' – Distwo

+0

Pour votre question # 2, je ne suis pas sûr de bien comprendre, mais il semblerait que vous souhaitiez regarder cette réponse: http://stackoverflow.com/a/10097160/1245894 – Distwo

+0

Dans le fichier AndroidManifest mettre cette ligne android: windowSoftInputMode = "adjustPan" comme un attribut sur l'activité –

Répondre

0

Question 1:

Essayez d'utiliser android:layout_width="match_parent" à votre CardView et RelativeLayout:

cardview_search.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="120dp" 
    card_view:cardCornerRadius="4dp" 
    card_view:cardElevation="4dp" 
    card_view:cardUseCompatPadding="true"> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="@style/cardview_header" 
      android:text="filtro" 
      android:id="@+id/filtro" 
      android:layout_marginBottom="5dp" 
      android:layout_alignParentTop="true" 
      android:layout_marginLeft="10dp" /> 
     <ImageButton 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/boton_cerrar" 
      android:src="@drawable/ic_close_box" 
      android:layout_alignParentTop="true" 
      android:background="@null" 
      android:layout_alignParentRight="true"/> 
     <Spinner android:text="@string/opcion" 
      android:id="@+id/spinner" 
      android:layout_width="150dp" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/linea" 
      android:layout_marginRight="5dp" 
      /> 
     <EditText 
      android:id="@+id/texto" 
      android:layout_width="100dp" 
      android:gravity="end" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/spinner" 
      android:layout_marginEnd="10dp" 
      android:layout_alignTop="@id/spinner" 
      android:layout_toRightOf="@id/spinner" 
      android:layout_marginRight="10dp" 
      /> 
     <View 
      android:layout_width="wrap_content" 
      android:layout_height="1dp" 
      android:background="#ffd5d5d5" 
      android:id="@+id/linea" 
      android:layout_below="@+id/filtro" 
      android:layout_marginBottom="5dp"></View> 
     <!--ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/estado" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentRight="true" 
      /--> 
    </RelativeLayout> 
</android.support.v7.widget.CardView> 

Question 2:

Retirez android:layout_weight="1" de ScrollView

+0

les réponses que vous avez fournies ne fonctionnent pas – Tico1993