1

Je travaille sur un projet où j'ai besoin d'implémenter une grille pour afficher des "Widgets" (Custom made Views), réorganisés dynamiquement par l'utilisateur final. Plus ou moins la même chose que les lanceurs Android et leurs widgets, des widgets qui peuvent être déplacés dans la grille par l'utilisateur (avec une pression longue, comme la plupart des lanceurs). Voici un aperçu de ce que je cherche: Every color represents one different kind of "Widget"Diffrente grille de taille de cellule pour les vues personnalisées

J'ai essayé avec GridLayout et TableLayout, mais je ne suis pas en mesure de cellules « fusionner » pour ajuster la mise en page du widget. La grille elle-même est une grille de 8 x 12 cellules, où les widgets peuvent utiliser plus de 1 cellule chacun, par exemple, j'ai configuré un "bouton Widget" qui est 2 x 3 (h | w).

Y a-t-il une disposition qui correspond à ce dont j'ai besoin ou que je dois créer la mienne?

Merci, Abel!

+0

Avez-vous regardé PercentRelativeLayout? – ditkin

+0

Cela semble prometteur! Je vais essayer de configurer quelque chose et de commenter à nouveau! ** EDIT: ** J'ai essayé de configurer le pourcentage d'enfants PercentRelativeLayout en Java, mais il semble (en regardant les exemples que j'ai trouvé: [exemple] (http://stackoverflow.com/questions/32497833/how-to-set- le-pourcentage-hauteur-largeur-de-enfant-vues-de-percentframelayout-at-r)), le pourcentage ne peut être réglé avec java que si la vue enfant est définie en utilisant XML. J'ai besoin de créer et de positionner des objets dynamiquement, tout comme les Widgets Launcher. Merci beaucoup! –

Répondre

1

J'ai utilisé le code suivant pour créer et mettre en programmation des vues leur PercentRelativeLayout.LayoutParams:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_percent_relative); 

    ViewGroup root = (ViewGroup)findViewById(R.id.perecent_layout_view); 

    View blueWidget = new View(this); 
    blueWidget.setBackground(blue); 
    root.addView(blueWidget); 

    setUpLayout(blueWidget, 2.0f/8.0f, 6.0f/8.0f, 6.0f/8.0f, 0.0f, 2.0f/8.0f, 0.0f); 

    View redWidget = new View(this); 
    redWidget.setBackground(red); 
    root.addView(redWidget); 

    setUpLayout(redWidget, 5.0f/8.0f, 2.0f/8.0f, 3.0f/8.0f, 0.0f, 0.0f, 6.0f/8.0f); 

} 

private void setUpLayout(View view, float widthPercent, 
         float heightPercent, 
         float leftMarginPercent, 
         float rightMarginPercent, 
         float topMarginPercent, 
         float bottomMarginPercent) { 

    PercentRelativeLayout.LayoutParams layoutParams = new PercentRelativeLayout.LayoutParams(view.getLayoutParams()); 
    PercentLayoutHelper.PercentLayoutInfo percentLayoutInfo = layoutParams.getPercentLayoutInfo(); 

    percentLayoutInfo.heightPercent = heightPercent; 
    percentLayoutInfo.widthPercent = widthPercent; 
    percentLayoutInfo.topMarginPercent= topMarginPercent; 
    percentLayoutInfo.bottomMarginPercent= bottomMarginPercent; 
    percentLayoutInfo.leftMarginPercent= leftMarginPercent; 
    percentLayoutInfo.rightMarginPercent= rightMarginPercent; 

    view.setLayoutParams(layoutParams); 

} 

La vue ressemble à ceci: enter image description here

+0

Je marque celui-ci comme la bonne réponse car il semble parfaitement valide pour ce que j'ai demandé, mais je pense que j'ai trouvé un moyen de le faire avec un simple GridLayout et quelques tableaux pour gérer les positions. Je l'afficherai ici si finalement cela fonctionne. Merci! –

+0

Lorsque vous postez votre solution, n'hésitez pas à la marquer comme la bonne. Je voulais démontrer que vous pouvez utiliser la mise en page par programme et obtenir le comportement que vous vouliez. – ditkin

1

Votre application peut-elle se contenter d'une grille décalée avec une vue recycleur? http://developer.android.com/reference/android/support/v7/widget/StaggeredGridLayoutManager.html

toutes les dimensions de la colonne doit être le même si ... un peu comme ce qui suit enter image description here

tiré de cet exemple https://guides.codepath.com/android/using-the-recyclerview

+0

Mmm ... La taille de la colonne devrait être variable aussi, donc je pense que ce n'est pas la meilleure option ... Je vais regarder ça, mais ça ne semble pas correspondre à ce que je En tout cas, merci pour ton soutien! –