1

У меня есть центр кнопки в RelativeLayout и два изображения под кнопкой. У меня есть два вопроса, когда я обернуть RelativeLayout в ScrollView:centerInParent кнопка в RelativeLayout, завернутая в ScrollView

  • кнопка теперь сосредоточенные в RelativeLayout включая прокрутку часть. Это не то, что я хочу, я хочу держать его в центре экрана, который я вижу без прокрутки.

  • мои изображения, расположенные ниже моего центра. Кнопка «Больше» больше не находится под кнопкой. Он работает так, как если бы кнопка находилась в верхнем левом углу.

Так изображения ниже белого пространства в верхней части, как если кнопка была там, а кнопка находится в центре моего расположения, но не так как я хочу, чтобы это было: D

Вот мой код:

<ScrollView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <Button 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="50dp" 
     android:layout_centerInParent="true" 
     android:layout_marginBottom="16dp" 
     android:background="#E74E4C" 
     android:paddingLeft="24dp" 
     android:paddingRight="24dp" /> 

    <ImageView 
     android:id="@+id/imageone" 
     android:layout_width="match_parent" 
     android:layout_height="250dp" 
     android:layout_below="@id/button" 
     android:layout_margin="16dp" 
     android:scaleType="centerCrop" 
     android:src="@drawable/myimage" /> 

    <ImageView 
     android:id="@+id/imagetwo" 
     android:layout_width="match_parent" 
     android:layout_height="250dp" 
     android:layout_below="@id/imageone" 
     android:layout_margin="16dp" 
     android:scaleType="centerCrop" 
     android:src="@drawable/myimagetwo" /> 

</RelativeLayout> 

</ScrollView> 

вы видите, что это не так? Для информации я намерен добавить нижнюю панель навигации.

Вот что я хочу, и что я получаю: enter image description here

+0

Кнопка центрирования в относительной компоновки, а не только на экране, ожидается. Он центрируется относительно родителя. Родитель - это относительный макет, а не экран. –

+0

@ Alex9494 Эй вы можете опубликовать то, что получаете то, что вы хотите получить? –

+1

@Charuka Привет, я только что обновил свой вопрос с рисунком – Alex9494

ответ

1

Программно укажите topMargin, основываясь на соотношении, и все готово! Если вы хотите отрегулировать, вы можете изменять значения, не имеет значения, какой экран он отображает, будет отображаться одинаковое соотношение.

Вот мой XML небольшое отличается от вашей - (изменить идентификаторы я просто добавить те)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/rel" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#000" 
    android:gravity="center_horizontal"> 

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_alignParentBottom="true" 
      android:gravity="center" 
      android:orientation="vertical"> 

      <RelativeLayout 

       android:id="@+id/lin" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical"> 

       <Button 
        android:id="@+id/button" 
        android:layout_width="wrap_content" 
        android:layout_height="50dp" 
        android:layout_alignParentBottom="true" 
        android:layout_marginBottom="16dp" 
        android:background="#E74E4C" 
        android:gravity="bottom" 
        android:paddingLeft="24dp" 
        android:paddingRight="24dp" /> 
      </RelativeLayout> 

      <ImageView 
       android:id="@+id/imageone" 
       android:layout_width="match_parent" 
       android:layout_height="250dp" 
       android:layout_margin="16dp" 
       android:background="#FFF" 
       android:scaleType="centerCrop" /> 

      <ImageView 
       android:id="@+id/imagetwo" 
       android:layout_width="match_parent" 
       android:layout_height="250dp" 
       android:layout_margin="16dp" 
       android:background="#7823" 
       android:scaleType="centerCrop" /> 


     </LinearLayout> 

    </ScrollView> 

</LinearLayout> 

код

private int screenHeight; 
    private int screenWidth; 
    private RelativeLayout relativeLayout; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.web); 
     relativeLayout =(RelativeLayout) findViewById(R.id.lin); 


     Display display = getWindowManager().getDefaultDisplay(); 
     Point size = new Point(); 
     display.getSize(size); 
     screenHeight = size.y; 
     screenWidth = size.x; 

     LinearLayout.LayoutParams relBtn = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
     relBtn.topMargin = ((1920/2) *screenHeight/1920); // ratio based mine height is 1920 so to get it to middle i give half height, will be same in your mobiles too , you can change 1920/2 as you like 
     relativeLayout.setLayoutParams(relBtn); 


    } 

то же самое с RelativeLayout.LayoutParams

XML:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <RelativeLayout 
     android:gravity="center" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentBottom="true" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/tv" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:text="HELLO" 
      android:textColor="#FFF" 
      android:textSize="20dp" /> 

     <RelativeLayout 
      android:id="@+id/lin" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:gravity="center"> 

      <Button 
       android:id="@+id/button" 
       android:layout_width="wrap_content" 
       android:layout_height="50dp" 

       android:layout_alignParentBottom="true" 
       android:layout_marginBottom="16dp" 
       android:background="@color/colorPrimaryDark" 
       android:gravity="bottom" 
       android:paddingLeft="24dp" 
       android:paddingRight="24dp" /> 
     </RelativeLayout> 

     <ImageView 
      android:id="@+id/imageone" 
      android:layout_width="match_parent" 
      android:layout_height="250dp" 
      android:layout_below="@+id/lin" 
      android:layout_margin="16dp" 
      android:background="@drawable/girl" 
      android:scaleType="fitXY" /> 

     <ImageView 
      android:id="@+id/imagetwo" 
      android:layout_width="match_parent" 
      android:layout_height="250dp" 
      android:layout_below="@+id/imageone" 
      android:layout_margin="16dp" 
      android:background="@drawable/amanda" 
      android:scaleType="fitXY" /> 


    </RelativeLayout> 

</ScrollView> 

Код:

private int screenHeight; 
    private int screenWidth; 
    private TextView textView; 
    private RelativeLayout relativeLayout; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.web); 
     relativeLayout =(RelativeLayout) findViewById(R.id.lin); 
     textView =(TextView) findViewById(R.id.tv); 


     Display display = getWindowManager().getDefaultDisplay(); 
     Point size = new Point(); 
     display.getSize(size); 
     screenHeight = size.y; 
     screenWidth = size.x; 


     RelativeLayout.LayoutParams tv = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
     tv.addRule(RelativeLayout.CENTER_HORIZONTAL); 
     tv.topMargin = ((100)*screenHeight/1920); // ratio based mine height is 1920 so to get it to middle i give half height, will be same in your mobiles too , you can change 1920/2 as you like 
     textView.setLayoutParams(tv); 

     RelativeLayout.LayoutParams relBtn = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
     relBtn.addRule(RelativeLayout.CENTER_HORIZONTAL); 
     relBtn.topMargin = ((1920/2 - 100) *screenHeight/1920); // ratio based mine height is 1920 so to get it to middle i give half height, will be same in your mobiles too , you can change 1920/2 as you like 

     relativeLayout.setLayoutParams(relBtn); 




    } 

выход:

enter image description here enter image description here

+0

Спасибо, он делает то, что я хотел! Я изменил одну строку в Java-коде (relBtn.topMargin = (screenHeight/2);), чтобы избежать таких чисел, как 1920, я думаю, что это работает. Я также добавил отрицательный marginTop к моему scrollview половину моей высоты кнопки, чтобы кнопка была полностью центрирована (без этого это верхняя часть кнопки, которая центрирована).Еще один вопрос: как добавить контент по центрированной кнопке? Я знаю, я должен был сказать это раньше: D Содержимое, которое можно прокрутить кнопкой и изображениями ниже. Я хочу, чтобы это содержимое было сосредоточено между верхней частью кнопки и верхней частью экрана. – Alex9494

+0

@ Alex9494First 1920 для высоты и 1080 для ширины - это размер ваших стендов, у вас не будет проблем с ними, если вы используете коэффициенты, которые я использовал их во многих приложениях, но вы можете использовать как вам нравится :). Второе голосование необходимо для дальнейшей информации .. ха-ха. Над центрированной кнопкой означает .. за ним или что-то сложное plz –

+0

Если вы хотите добавить представление между кнопкой и верхней частью экрана, то это просто сделать то же самое, что и я. добавьте представление, которое вы хотите перед кнопкой. Инициализируйте его, используйте код, сделайте то же самое для высоты, указав высоту, на которой вы хотите получить верхнюю границу. Вы также можете использовать 'relBtn.leftMargin = ((leftMarginValue) * screenWidth/1080);' если вы хотите переместить его горизонтально –

0

В конце концов, мне удалось получить это, заменить с вашими ценностями:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="fill_parent"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent"> 

    <Button 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="50dp" 
     android:background="#E74E4C" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="167dp" /> 


    <ImageView 
     android:id="@+id/imagetwo" 
     android:layout_width="match_parent" 
     android:layout_height="250dp" 
     android:layout_below="@id/button" 
     android:layout_margin="16dp" 
     android:scaleType="centerCrop" 
     android:src="@mipmap/ic_launcher" /> 


    <ImageView 
     android:id="@+id/imageone" 
     android:layout_width="match_parent" 
     android:layout_height="250dp" 
     android:layout_below="@id/imagetwo" 
     android:layout_margin="16dp" 
     android:scaleType="centerCrop" 
     android:src="@mipmap/ic_launcher" /> 

</RelativeLayout> 

</ScrollView> 

enter image description here

+0

Спасибо, но кнопка не центрируется на «видимом экране при открытии активности». 167dp marginTop вы добавили, чтобы не получить кнопку в верхней части экрана, но она не сосредоточена, как мне бы хотелось. – Alex9494

+0

Фактически длина 'RelativeLayout' не фиксирована, потому что она имеет вид режима в конце и постепенно увеличивается с представлением. Создание центра в центре не будет точным каждый раз. – W4R10CK

+0

Если вы сохраняете u, можете создать 2 вида наполовину наполовину и в одном представлении добавить кнопку, а на втором - добавить изображения. просто предположим, что в моем изображении разделите макет на 2 и в одну половину добавить кнопку soo, чтобы она была исправлена ​​и на втором добавлены изображения. – W4R10CK

0

ИЛИ

Try это с 2 макетами: enter image description here

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="fill_parent"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="300dp" 
     android:id="@+id/rl"> 

     <Button 
      android:id="@+id/button" 
      android:layout_width="wrap_content" 
      android:layout_height="50dp" 
      android:background="#E74E4C" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" 
      android:layout_marginBottom="71dp" /> 
    </RelativeLayout> 


    <ImageView 
     android:id="@+id/imagetwo" 
     android:layout_width="match_parent" 
     android:layout_height="250dp" 
     android:layout_below="@id/rl" 
     android:layout_margin="16dp" 
     android:scaleType="centerCrop" 
     android:src="@mipmap/ic_launcher" /> 


    <ImageView 
     android:id="@+id/imageone" 
     android:layout_width="match_parent" 
     android:layout_height="250dp" 
     android:layout_below="@id/imagetwo" 
     android:layout_margin="16dp" 
     android:scaleType="centerCrop" 
     android:src="@mipmap/ic_launcher" /> 





</RelativeLayout> 

</ScrollView> 
+0

Кнопка не центрируется на «видимом экране при открытии активности». У меня та же проблема, что и с нашей первой попытки, высота 300dp relativelayout позволяет не получить кнопку в верхней части экрана, но она не сосредоточена так, как мне бы хотелось. Я попытался с двумя LinearLayout с таким же весом и кнопкой в ​​нижней части первого linearlayout, но он не работает, когда я добавляю scrollview (высота каждого lineralayout - это не половина видимого экрана, а половина всего прокрутки). – Alex9494

+0

По крайней мере, я пробовал, и это было чем-то вроде работы, стоит upvote ... Ха-ха – W4R10CK

+0

Да, спасибо за то, что вы попробовали, как вы сказали, его «любопытная» работа. И вроде не работает;) – Alex9494

Смежные вопросы