Par programme définir la largeur et la hauteur de la GridView Et ImageView
J'ai vu tant de questions quant à la façon de définir la hauteur et la largeur d'un ImageView, et un GridView séparément. Ici, ici et ici pour commencer
Mais, je me demande comment définissez à la fois.
Voici mon installation. Dans mon GridView, j'ai une ImageView et un TextView. J'ai quelques images de différentes largeurs et de tailles, ce qui je veux la redimensionner pour toujours être à 1/3 de la taille de l'écran carré. En dessous, j'ai un texte de description.
Voici le code que j'ai jusqu'à présent...
gallerygridview.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/bg_light_blue"
android:orientation="vertical" >
<GridView
android:id="@+id/gridGallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:numColumns="3"
android:padding="0dp"
android:verticalSpacing="4dp" >
</GridView>
<ImageView
android:id="@+id/imgNoMedia"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:contentDescription="@string/app_name"
/>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:textStyle="bold"
android:typeface="sans"
android:layout_below="@+id/imageView1"
android:layout_marginTop="2dp"
android:layout_centerHorizontal="true"
android:textColorHighlight="#000000"
android:gravity="center"
/>
</LinearLayout>
Dans mon Activité...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gallerygridview);
GridView gridView = (GridView) findViewById(R.id.gridGallery);
m_adapter = new PhotoImageAdapter(getBaseContext(),m_images);
gridView.setAdapter(m_adapter); //uses the view to get the context instead of getActivity().
registerForContextMenu(gridView);
}
Et dans ma classe d'Adaptateur...
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
Holder holder=new Holder();
if (view == null) {
LayoutInflater inflater = LayoutInflater.from(mContext);
view = inflater.inflate(R.layout.gallerygridview, parent, false);
holder.img = new ImageView(mContext);
holder.img = (ImageView) view.findViewById(R.id.imgNoMedia);
holder.tv = (TextView) view.findViewById(R.id.textView1);
int iDisplayWidth = mContext.getResources().getDisplayMetrics().widthPixels ;
int iImageWidth = (iDisplayWidth / 3)-15 ;
GridView.LayoutParams glp = (GridView.LayoutParams) view.getLayoutParams();
glp.width = iImageWidth;
glp.height = iImageWidth ;
view.setLayoutParams(glp);
view.setTag(holder);
} else {
holder = (Holder) view.getTag();
}
holder.tv.setText(m_images.get(position).key);
holder.img.setImageURI(Uri.parse(m_images.get(position).value));
return view;
}
Pour l'instant, le contrôle GridView est exactement de 1/3ème de la taille de l'écran. Et l'image et le texte à afficher. Mais je voudrais l'ImageView pour remplir l'espace restant à l'intérieur de la GridView cellule.
Voici ce que je voudrais...
Mais c'est à quoi il ressemble...
Ce que je fais mal? Et, Comment puis-je définir par programmation à la fois la hauteur de la GridView, Et l'ImageView à l'intérieur?
Merci à l'avance.
Vous devez vous connecter pour publier un commentaire.
Voici une méthode relativement facile à faire. Jetez un GridView dans votre mise en page, la définition de la mode stretch à l'étirement de la colonne de largeur, l'espacement de 0 (ou ce que vous voulez), et définir le nombre de colonnes à 2:
et reportez-vous cette pour en savoir plus sur GridView et ImageView
Après avoir vu votre le mettre en images ,voici ce que j'ai compris, et la raison de ce problème
Lorsque vous redimensionnez une image ,doit être mis à l'échelle par rapport d'aspect de l'image.
ex: permet de dire à vos dimensions de l'image sont
900 1200 (w h)
à l'échelle de sa largeur à
400
devez faire comme cecinewWidth = 400;
newHeight = 1200 * (400/900) = 533.33
Si vous voulez que l'image d'une imageview devrait échelle automatiquement puis vérifier scaleType propriétés de ImageView en xml de mise en page(
fitCenter,centerInside
etc)Ajouter cette ligne dans votre getView
holder.img.setScaleType(ScaleType.CENTER_INSIDE);