powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / девять частей экрана
23 сообщений из 23, страница 1 из 1
девять частей экрана
    #38543056
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
привет всем

хочется поделить первую активность/экран на 9 равных частей
чтобы каждая часть была кликабельной

как так можно сделать?

применить TableLayout и в каждую ячейку вставить по кнопке?
и как сделать небольшое расстояние между кликабельными частями?

очень нужен хелп!
...
Рейтинг: 0 / 0
девять частей экрана
    #38543068
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listview
...
Рейтинг: 0 / 0
девять частей экрана
    #38543070
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагать сделать свою view, которую можно растянуть на всю активность, не стоит? Там и нарисовать можно что угодно и тач ловить в любом месте получится.
...
Рейтинг: 0 / 0
девять частей экрана
    #38543071
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джибсlistview
это же список...
...
Рейтинг: 0 / 0
девять частей экрана
    #38543093
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может тогда уж GridView ?
...
Рейтинг: 0 / 0
девять частей экрана
    #38543232
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buyboyДжибсlistview
это же список...

если тебе просто оформить как кнопки,

от решений полно
listview
gridview
их можно программно подогнать ровно

свой контрол.
...
Рейтинг: 0 / 0
девять частей экрана
    #38543473
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Джибс]buyboyпропущено...от решений полно
пытаюсь решить задачу с помощью android:weightSum, android:layout_height="0dp" и android:layout_weight="1"
не выходит нифига

у меня на материский активити добавлен GridView
а он заполняется кнопками на основе отдельного шаблона в котором кнопка вложена в LinearLayout

мозги высохли нафик
...
Рейтинг: 0 / 0
девять частей экрана
    #38543490
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buyboyмозги высохли нафик
нарисуй крестиками, чего тебе надо. 9 равный частей как? так
X
X
X
X
..
или так?
X X X
X X X
X X X
...
Рейтинг: 0 / 0
девять частей экрана
    #38543496
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaX X X
X X X
X X X
...
Рейтинг: 0 / 0
девять частей экрана
    #38543524
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот исходники

activity_main =
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="1.0"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <GridView
        android:id="@+id/gridView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#81bbd1"
        android:numColumns="3" >
    </GridView>

</LinearLayout>



item =
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:background="#a70000"
        android:textColor="#ffffff"
        android:text="Button" />

</LinearLayout>



java =
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public class MainActivity extends Activity {
	
	GridView gvMain;
	ArrayAdapter<String> adapter;		

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		Resources res = getResources();
		String[] data = res.getStringArray(R.array.labels);
        adapter = new ArrayAdapter<String>(this, R.layout.item, R.id.button1, data);
        gvMain = (GridView) findViewById(R.id.gridView1);
        gvMain.setAdapter(adapter);		
	}

}



screen =
...
Рейтинг: 0 / 0
девять частей экрана
    #38543529
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а надо, чтобы эти девять кнопок заполнили весь экран как по высоте так и по ширине
...
Рейтинг: 0 / 0
девять частей экрана
    #38543539
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подойдет что угодно. 2 варианта уже сказали, TableLayout и GridView. Есть еще самый продвинутый GridLayout - он наиболее гибок в настройке, но в отличии от GridView, в нем надо каждую ячейку описывать отдельно. что конкретно не выходит?
...
Рейтинг: 0 / 0
девять частей экрана
    #38543543
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, понял, что не выходит
...
Рейтинг: 0 / 0
девять частей экрана
    #38543558
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например (погуглив "крестики нолики андроид код"), тут реализовано так:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/main_l"
    android:gravity="center"
    >
</TableLayout>



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        layout = (TableLayout) findViewById(R.id.main_l);
        buildGameField();
    }

    private void buildGameField() {
        Square[][] field = game.getField();
        for (int i = 0, lenI = field.length; i < lenI; i++ ) {
            TableRow row = new TableRow(this); // создание строки таблицы
            for (int j = 0, lenJ = field[i].length; j < lenJ; j++) {
                Button button = new Button(this);
                buttons[i][j] = button;
                button.setOnClickListener(new Listener(i, j)); // установка слушателя, реагирующего на клик по кнопке
                row.addView(button, new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,
                        TableRow.LayoutParams.WRAP_CONTENT)); // добавление кнопки в строку таблицы
                button.setWidth(107);
                button.setHeight(107);
            }
            layout.addView(row, new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT,
                    TableLayout.LayoutParams.WRAP_CONTENT)); // добавление строки в таблицу
        }
    }



Хотя, размеры кнопок по-хорошему нужно рассчитывать.
...
Рейтинг: 0 / 0
девять частей экрана
    #38543559
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исходники.
...
Рейтинг: 0 / 0
девять частей экрана
    #38543589
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
унаследуйся от ArrayAdapter, переопредели метод getView и модифицируй в нем высоту контрола (вычислив ее из расчета общей доступной высоты экрана)
как-то так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
new ArrayAdapter<String>(context, ...) {
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View view = super.getView(position, convertView, parent);
                view.getLayoutParams().height = X;
                return view;
            }
        };
...
Рейтинг: 0 / 0
девять частей экрана
    #38543752
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот этот код почти устраивает, только кнопки не хотят прижиматься друг к другу вплотную и нижний ряд почему-то имеет меньшую высоту=
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
public class MainActivity extends Activity {
	
	RelativeLayout rv;
	
	TableLayout layout;
	
	 final static int AMOUNT = 9;
	 final static int ROW = 3;
	 
	 float widthButt;
	 float heightButt;

	@SuppressLint("NewApi")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		Display display = getWindowManager().getDefaultDisplay();
		Point size = new Point();
		display.getSize(size);
		
		int dpX = (int)(size.x*getResources().getDisplayMetrics().density);
		int dpY = (int)(size.y*getResources().getDisplayMetrics().density);
		
		widthButt = dpX / ROW;
		heightButt = dpY / ROW;
		
		layout = (TableLayout) findViewById(R.id.main_tab);        
        rv = (RelativeLayout)findViewById(R.id.main_rv);
        
        TableRow row1 = (TableRow)findViewById(R.id.tableRow1);
        TableRow row2 = (TableRow)findViewById(R.id.tableRow2);
        TableRow row3 = (TableRow)findViewById(R.id.tableRow3);
       
        
        for(int i = 0; i < AMOUNT; i++) {
        	Button button = new Button(this);
        	button.setText(Integer.toString(i));
            button.setWidth((int)widthButt);
            button.setHeight((int)heightButt);          
        	
        	TableRow row = new TableRow(this);
        	if(i == 0 || i == 1 || i == 2) {
        		row1.addView(button);
        	} else if(i == 3 || i == 4 || i == 5) {
        		row2.addView(button);
        	} else if(i == 6 || i == 7 || i == 8) {
        		row3.addView(button);
        	}

        }

	}

}



скрин =
...
Рейтинг: 0 / 0
девять частей экрана
    #38543927
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то странное ты хочешь...

MyTableView
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
package ru.wadman.testapp;

import android.view.View;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Color;
import android.graphics.Rect;
import android.view.MotionEvent;

public class MyTableView extends View implements View.OnTouchListener {

    final int amount = 3;
    private int isClicked = -1;

    public MyTableView(Context context) {
        super(context);
        setOnTouchListener(this);
    }

    public boolean onTouch (View v, MotionEvent event) {
        final int buttonHeight = (int)getHeight() / amount;
        final int buttonWidth = (int)getWidth() / amount;

        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            // нажали
            isClicked = (int)((event.getX() / buttonWidth) + (event.getY() / buttonHeight)*amount)-1;
            invalidate();
            return true;
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            // отпустили
            isClicked = -1;
            invalidate();
            return true;
        }

        return false;

    }

    @Override
    protected void onDraw(Canvas canvas){
        final int buttonHeight = (int)getHeight() / amount;
        final int buttonWidth = (int)getWidth() / amount;

        Paint paint = new Paint();
        paint.setStyle(Paint.Style.FILL);

        paint.setColor(Color.WHITE);
        canvas.drawPaint(paint);

        for (int i = 0; i < amount*amount; i++) {
            Rect rect = new Rect();
            rect.left = (i % amount)*buttonWidth;
            rect.top = (int)(i / amount)*buttonHeight;
            rect.right = rect.left+buttonWidth;
            rect.bottom = rect.top+buttonHeight;
            final String text = Integer.toString(i+1);
            if (i == isClicked) {
                paint.setColor(Color.CYAN);
            } else {
                paint.setColor(Color.LTGRAY);
            }
            canvas.drawRect(rect, paint);

            paint.setColor(Color.BLACK);
            paint.setTextSize(25);
            canvas.drawText(text, rect.left + (int)((rect.width() - paint.measureText(text)) / 2), rect.top + (int)((rect.height() - paint.getTextSize()) / 2), paint);
        }

    }

}



MainActivity
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
package ru.wadman.testapp;

import android.os.Bundle;
import android.view.Menu;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.app.AlertDialog;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.net.Uri;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
     
        @Override
        protected void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            MyTableView m = new MyTableView(this);
            setContentView(m);
        }
     
}



На картине нажато на "1", если отпустить, то "засереет", как и все.
...
Рейтинг: 0 / 0
девять частей экрана
    #38543946
Gwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>вот этот код почти устраивает,
>> только кнопки не хотят прижиматься друг к другу вплотную и
>> нижний ряд почему-то имеет меньшую высоту=

buyboy,
Потому что когда берёте высоту нужно вычесть высоту заголовка.
или создавать Activity без заголовка
...
Рейтинг: 0 / 0
девять частей экрана
    #38543958
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GwaПотому что когда берёте высоту нужно вычесть высоту заголовка.
или создавать Activity без заголовка

не только это. в коде есть принципиальная ошибка (в данном случае на эмулятор видимо 1 dp = 1 px из-за того, что плотность 160dpi и потому ошибка не проявилась пока). если запустить на устройстве с более крупным dpi расчет высоты станет в принципе не верен т.к. размер экрана определяется как dp, а высота вьюх должна задаваться в пикселах.
...
Рейтинг: 0 / 0
девять частей экрана
    #38543964
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaне только это. в коде есть принципиальная ошибка (в данном случае на эмулятор видимо 1 dp = 1 px из-за того, что плотность 160dpi и потому ошибка не проявилась пока). если запустить на устройстве с более крупным dpi расчет высоты станет в принципе не верен т.к. размер экрана определяется как dp, а высота вьюх должна задаваться в пикселах.

а не пардон, все правильно - реальный размер в пикселах вычисляется, меня названия переменных dpX и dpY ввели в заблуждение.
...
Рейтинг: 0 / 0
девять частей экрана
    #38544469
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GwaПотому что когда берёте высоту нужно вычесть высоту заголовка. или создавать Activity без заголовка
супер! архиспасибо!

реализовал так =

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
clearYSize = size.y - getTitleBarHeight();

public int getStatusBarHeight() {
	Rect r = new Rect();
	Window w = getWindow();
	w.getDecorView().getWindowVisibleDisplayFrame(r);
	return r.top;
}

 
public int getTitleBarHeight() {
	int viewTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
	return (viewTop - getStatusBarHeight());
}
...
Рейтинг: 0 / 0
девять частей экрана
    #38544470
buyboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,
не странное хочу, а скорее странно реализую свои хотелки :))
большое спасибо за код!
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Android [игнор отключен] [закрыт для гостей] / девять частей экрана
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]