Come get la dimensione del bordo del button in Android

Come posso get la width del bordo di un button Android a livello di programmazione? Ho semplicemente bisogno di ridimensionare il text per adattarmi all'area grigia e ho bisogno di posizionare altri oggetti in linea con i pulsanti, ma non posso farlo senza conoscere le size del bordo. Ho bisogno di questo per funzionare in tutti i 7+ API. Le frecce rosse nell'image qui sotto mostrano quello che sto cercando di get:

Larghezza del bordo

  • Compressione video su Android utilizzando la nuova libreria MediaCodec
  • Come riprodurre automaticamente Playlist in Spotify Android app
  • Notifiche Firebase tramite il codice lato server
  • Android: differenza tra il button positivo, negativo e neutro
  • Come riprodurre video su VideoView all'interno di ViewPager dal server
  • Invia richiesta post utilizzando Volley e ricevere in PHP
  • Ecco il codice che uso per la creazione del mio button:

    cmdView = new Button(this); params = new RelativeLayout.LayoutParams(widthLblViewVerbs , (int) fieldHeight); params.leftMargin = (int) (screenWidth - params.width); params.topMargin = (int) yPos; cmdView.setSingleLine(); cmdView.setText("View"); cmdView.setPadding(0, 0, 0, 0); cmdView.setTextSize(TypedValue.COMPLEX_UNIT_PX, SetTextSize(cmdView.getText().toString(), params.width, params.height)); layout.addView(cmdView, params); 

    NB. Ho dovuto nuovamente chiedere questa domanda perché qualcuno ha vinto la mia ultima volta la mia domanda e sono disperata per una soluzione. Non ho fatto alcun progresso con il mio programma in settimane perché sono stato bloccato con questo e un altro problema. Se c'è qualcosa di poco chiaro della mia domanda, per favore fathemes sapere e lo modificherò. Grazie

  • MVP, impostare la visualizzazione del presentatore su nulla per distruggere?
  • Scadenza delle entrate del database in tempo reale di Firebase
  • WebView.loadUrl (url) non fa nulla
  • Android: Possibile connettere il bluetooth a sé?
  • TraduciAnimazione su ImageView (Android)
  • Android utilizzando Gradle Crea sapori nel codice come se fosse un caso
  • 4 Solutions collect form web for “Come get la dimensione del bordo del button in Android”

    La mia raccomandazione iniziale di codice dai commenti può essere trovata qui . L'implementazione di Dan Bray è:

     final Button button = new Button(this); params = new RelativeLayout.LayoutParams(50, 50); layout.addView(button, params); button.post(new Runnable() { @Override public void run() { button.buildDrawingCache(); Bitmap viewCopy = button.getDrawingCache(); boolean stillBorder = true; PaddingLeft = 0; PaddingTop = 0; while (stillBorder) { int color = viewCopy.getPixel(PaddingLeft, button.getHeight() / 2); if (color != Color.TRANSPARENT) stillBorder = false; else PaddingLeft++; } stillBorder = true; while (stillBorder) { int color = viewCopy.getPixel(button.getWidth() / 2, PaddingTop); if (color != Color.TRANSPARENT) stillBorder = false; else PaddingTop++; } } }); 

    Non è molto chiaro sulla domanda: si desidera che i margini della vista sottostante e quindi impostare la dimensione del button per abbinare? Allora hai provato

     ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); 

    i margini sono accessibili via

     lp.leftMargin; lp.rightMargin; lp.topMargin; lp.bottomMargin; 

    Dettagli qui: http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html

    Questo ottiene la width e l'altezza del bordo del button:

     final Button button = new Button(this); params = new RelativeLayout.LayoutParams(50, 50); layout.addView(button, params); button.post(new Runnable() { @Override public void run() { button.buildDrawingCache(); Bitmap viewCopy = button.getDrawingCache(); boolean stillBorder = true; PaddingLeft = 0; PaddingTop = 0; while (stillBorder) { int color = viewCopy.getPixel(PaddingLeft, button.getHeight() / 2); if (color != Color.TRANSPARENT) stillBorder = false; else PaddingLeft++; } stillBorder = true; while (stillBorder) { int color = viewCopy.getPixel(button.getWidth() / 2, PaddingTop); if (color != Color.TRANSPARENT) stillBorder = false; else PaddingTop++; } } }); 

    Supponendo che utilizzi un'image di background di nove patch, esiste un modo molto più semplice.

    Nelle nove immagini patch è ansible definire una casella di riempimento. Questa casella di riempimento verrà automaticamente applicata al contenuto impostato. Non c'è bisogno di ricalcolare manualmente i paddings in questo caso.

    Tieni presente che non dovresti impostare un'imbottitura sulle viste utilizzando una nove patch come background poiché l'imbottitura dei nove patch verrà ignorata.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.