Die Breite / Höhe eines Layouts in Android erhalten

Ich frage mich, wie man die Dimensionen einer Ansicht messen kann. In meinem Fall ist es ein absolutes Layout. Ich habe die Antworten zu diesen Fragen gelesen, aber ich verstehe es immer noch nicht. Ich bin ziemlich neu bei der Programmierung so vielleicht ist es nur ich. 😉

Das ist mein Code:

  • Wie benutzt man Bibliotheken in AIDE
  • Wie deaktiviere man vergangene Daten in Android Date Picker?
  • Was ist der beste Weg, um zu kombinieren (zusammenführen) 2 JSONObjects?
  • Was macht repo init und repo sync eigentlich?
  • Wiederherstellung der gelöschten Xml-Datei von App in Android
  • Android, sideloading Anwendungen und halten sie up to date über Google Play
  • public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); AbsoluteLayout layoutbase = (AbsoluteLayout) findViewById(R.id.layoutbase); drawOval(); } public void drawOval(){ //, int screenWidth, int screenHeight){ AbsoluteLayout layoutbase = (AbsoluteLayout) findViewById(R.id.layoutbase); int screenWidth = layoutbase.getWidth(); int screenHeight = layoutbase.getHeight(); Log.i("MyActivity", "screenWidth: " + screenWidth + ", screenHeight: " +screenHeight); Coordinates c = new Coordinates(BUTTONSIZE,screenWidth,screenHeight); ...some code ... ((ViewGroup) layoutbase ).addView(mybutton, new AbsoluteLayout.LayoutParams(BUTTONSIZE, BUTTONSIZE, c.mX, c.mY)); mybutton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { showText(mybutton); } }); } public void showText(View button){ int x = findViewById(LAYOUT).getWidth(); int y = findViewById(LAYOUT).getHeight(); Toast message = Toast.makeText(this, "x: " + x , Toast.LENGTH_SHORT); message.show(); } 

    Der Befehl getWidth() funktioniert in showText() aber es ist nicht in drawOval() . Ich weiß, es sieht ein bisschen anders aus, aber ich habe auch die int x = findViewById(LAYOUT).getWidth(); Version in drawOval() und x / y sind immer 0 . Ich verstehe nicht wirklich, warum es an diesem früheren Punkt keine Breite / Höhe gibt. Auch wenn ich eigentlich einen Button auf das Absolute Layout getWidth() , gibt getWidth() 0 . Natürlich möchte ich die Größen in drawOval() messen.

    Ich würde jede Hilfe schätzen.

    Vielen Dank!

  • Benutzerdefiniertes Listenelement zu ListView android
  • LocationServices.SettingsApi Reset SETTINGS_CHANGE_UNAVAILABLE Flag
  • Android: Kann nicht MotionEvent.ACTION_MOVE richtig verwenden
  • Spielen Sie einen Audioclip auf einen laufenden Anruf
  • Gradle und Multi-Projekt-Struktur
  • Speichern Sie eine Liste oder legen Sie in SharedPreferences fest
  • 6 Solutions collect form web for “Die Breite / Höhe eines Layouts in Android erhalten”

    Ich denke, wird dir helfen.

      LinearLayout headerLayout = (LinearLayout)findviewbyid(R.id.headerLayout); ViewTreeObserver observer = headerLayout .getViewTreeObserver(); observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // TODO Auto-generated method stub int headerLayoutHeight= headerLayout.getHeight(); int headerLayoutWidth = headerLayout.getWidth(); headerLayout .getViewTreeObserver().removeGlobalOnLayoutListener( this); } }); } 

    getWidth() gibt dir 0, weil onCreate aufgerufen wird, bevor das Layout tatsächlich passiert. Aufgrund von Ansichten, die dynamische Positionen und Größen auf der Grundlage von Attributen oder anderen Elementen ( fill_parent ) haben können, gibt es keine feste Größe für jede gegebene Ansicht oder ein Layout. Zur Laufzeit gibt es einen Punkt in der Zeit (eigentlich kann es immer wieder passieren, abhängig von vielen Faktoren), wo alles tatsächlich gemessen und ausgelegt ist. Wenn du wirklich die Höhe und Breite brauchst, musst du sie später bekommen, wie du entdeckt hast.

    Das beschäftigt sich besonders mit Dimension s so

     Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight(); 

    Dies kann Ihnen bei der Verwaltung von Dimensionen helfen.

    Hinweis: Damit werden die Anzeigeabmessungen in Pixel – wie erwartet – zurückgegeben. Aber die Methoden getWidth () und getHeight () sind veraltet. Stattdessen können Sie:

     Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; int height = size.y; 

    Wie auch Martin Koubek vorgeschlagen hat.

    Wenn Ihr Ziel ist, einfach ein Oval auf dem Bildschirm zu zeichnen, dann erwägen, Ihre eigene benutzerdefinierte View erstellen, anstatt herumzuspielen mit AbsoluteLayout . Ihre benutzerdefinierte View muss onDraw(android.graphics.Canvas) , die aufgerufen wird, wenn die Ansicht ihren Inhalt wiedergeben soll.

    Hier ist ein extrem einfacher Beispielcode, der Ihnen helfen könnte, Ihnen zu beginnen:

     public class MainActivity extends Activity { private final Paint mPaint = new Paint(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new SampleView(this)); } // create a nested custom view class that can draw an oval. if the // "SampleView" is not specific to the Activity, put the class in // a new file called "SampleView.java" and make the class public // and non-static so that other Activities can use it. private static class SampleView extends View { public SampleView(Context context) { super(context); setFocusable(true); } @Override protected void onDraw(Canvas canvas) { canvas.drawColor(Color.CYAN); // smoothen edges mPaint.setAntiAlias(true); mPaint.setColor(Color.RED); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(4.5f); // set alpha value (opacity) mPaint.setAlpha(0x80); // draw oval on canvas canvas.drawOval(new RectF(50, 50, 20, 40), mPaint); } } } 

    Kabukos antwort ist richtig, könnte aber ein wenig klarer sein, also lass mich klären.

    getWidth() und getHeight() sind (korrekt) geben Sie 0, weil sie nicht in das Layout gezeichnet wurden, wenn Sie sie anrufen. Versuchen Sie, die beiden Methoden auf der Schaltfläche nach addView() nachdem die Ansicht gezeichnet wurde und im Layout vorhanden ist) und sehen Sie, ob das Ihnen das erwartete Ergebnis gibt.

    Sehen Sie diesen Beitrag für weitere Informationen.

    Dies gibt Ihnen Bildschirmauflösung:

      WindowManager wm = (WindowManager)context.getSystemService(context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); Point outSize = new Point(); display.getSize(outSize); 
    Das Android ist ein Google Android Fan-Website, Alles über Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.