Bitte um Hilfe und tipps bei der ersten App - Sudoku

B

BurnX

Neues Mitglied
0
//EINLEITUNG:
Hi!

Ich bin noch ein totaler Anfänger, was Android angeht, aber ich liege seit ein paar Tagen krank im Bett und da habe ich mal die Tutorials von der App AIDE durchgearbeitet.
Wo ich nun damit durch bin wollte ich gern als Testapp nen Sudoku für mein Handy schreiben...
...eins das eben nicht Zugriff auf meine Konten, Email, oder weiß der Henker was fordert! < .<

Den java-Code habe ich soweit fertig und kann ihn mir als TextView, oder im LogCat mit System.out.print() anzeigen lassen.

Nun gehe ich an das gestalterische und stoße da laufend auf Probleme...

//VORAUSSETZUNGEN
Ich programmiere mit AIDE auf meinem HTC ONE für minSDKVersion 8 und targetSDKVersion 11

//FRAGEN:
1. Was würdet ihr für eine View verwenden um das Sudoku darzustellen.
Ich dachte an etwas in richtung Images, damit ich das Layout meines Sudokus auch schön gestalten kann...

Ich versuche es gerade mit 9 GridViews mit je 9 Zellen um die 9 Blöcke des Sudokus zu bilden.
Die habe ich in LinearLayouts gepackt, wie im Bild zu sehen, nur, dass sie leider noch nicht so, wie im Bild dargestellt werden.

Leider kann ich hier aus mir unbekannten Gründen keinen Text Einfügen und da ich erstmal wenig lust habe, mein MAIN.XML abzutippen lassen wir meine kläglichen Ansätze mal außen vor.
Vielleicht lade ich auch screenshots von meinem Text hoch...

2. Meine zweite Frage ist, warum wohl mein logo nach oben und unten platz lässt...
Ich habe sowohl von dem es umgebenden LinearLayout mit fill_parent, als auch von der ImageView mit match_parent alle paddings und margins ganz klar auf 0 gesetzt.
In der horizontalen Ansicht schließt das logo am oberen Rand des Displays ab, aber wenn ich das Handy vertikal halte, ist da eindeutig ein Rand...
Ich benutze @android:style/Theme.Light.NoTitleBar.Fullscreen.
Ich hätte das Logo gern randlos oben und müsste für's Layout auch wissen, wie viel platz das Logo nun tatsächlich einnimmt.

Schon mal vielen Dank im Voraus!

MfG BurnX
 

Anhänge

  • tmp_Unbenannt-128102133.png
    tmp_Unbenannt-128102133.png
    29,6 KB · Aufrufe: 304
Zur 1 Frage:
Was erwartest du denn jetzt? :)
Ein GridView mit 9 Feldern und dort jeweils ein weiteres GridView anzuzeigen ist durchaus Sinnvoll... Wenn das nicht so aussieht wie im Bild, wie dann? Wo ist hier dein problem?

Zu 2 Frage:
Auch hier wieder, was erwartest du jetzt?
Wir haben keinerlie XML File um zu schauen wie es derzeit aussieht, noch ein Screenshot. Nur deine Angaben. Wenn du es so schreibst, wie es IST, dann können wir höchtest sagen: "Ja, so müsste es stimmen"...

Bitte frage einfach präziser! Zeig relevanten Code und wie es derzeit ist und wie du es zulünftig haben willst.

Gruß
 
Hey!
Schon mal Danke, für die rasche Antwort.
Es ist mir etwas peinlich, aber irgendwie finde ich nicht die Möglichkeit, weitere Screenshots hochzuladen...

Ich könnte sie zwar einbetten, wenn sie schon online wären, aber so wie beim erstellen des Themas, einfach von Handy hochladen - die Option finde ich nirgends...

Dafür habe ich jetzt komischerweise die Möglichkeit etwas einzufügen... ^^"

MAIN.XML
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="0dp"
    android:layout_margin="0dp"
    android:orientation="vertical"
    android:background="@color/green">

    <ImageView
        android:id="@+id/mainImageViewLogo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="top"
        android:layout_margin="0dp"
        android:padding="0dp"
        android:src="@drawable/logo02"
        android:background="@color/green"/>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:background="@color/green">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <GridView
                android:id="@+id/gridview1"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:columnWidth="0dp"
                android:numColumns="3"
                android:verticalSpacing="0dp"
                android:horizontalSpacing="0dp"
                android:stretchMode="columnWidth"/>

            <GridView
                android:id="@+id/gridview2"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:columnWidth="0dp"
                android:numColumns="3"
                android:verticalSpacing="0dp"
                android:horizontalSpacing="0dp"
                android:stretchMode="columnWidth"/>

            <GridView
                android:id="@+id/gridview3"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:columnWidth="0dp"
                android:numColumns="3"
                android:verticalSpacing="0dp"
                android:horizontalSpacing="0dp"
                android:stretchMode="columnWidth"/>

        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <GridView
                android:id="@+id/gridview4"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:columnWidth="0dp"
                android:numColumns="3"
                android:verticalSpacing="0dp"
                android:horizontalSpacing="0dp"
                android:stretchMode="columnWidth"/>

            <GridView
                android:id="@+id/gridview5"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:columnWidth="0dp"
                android:numColumns="3"
                android:verticalSpacing="0dp"
                android:horizontalSpacing="0dp"
                android:stretchMode="columnWidth"/>

            <GridView
                android:id="@+id/gridview6"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:columnWidth="0dp"
                android:numColumns="3"
                android:verticalSpacing="0dp"
                android:horizontalSpacing="0dp"
                android:stretchMode="columnWidth"/>

        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <GridView
                android:id="@+id/gridview7"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:columnWidth="0dp"
                android:numColumns="3"
                android:verticalSpacing="0dp"
                android:horizontalSpacing="0dp"
                android:stretchMode="columnWidth"
                android:scaleY="10.0"/>

            <GridView
                android:id="@+id/gridview8"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:columnWidth="0dp"
                android:numColumns="3"
                android:verticalSpacing="0dp"
                android:horizontalSpacing="0dp"
                android:stretchMode="columnWidth"/>

            <GridView
                android:id="@+id/gridview9"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:columnWidth="0dp"
                android:numColumns="3"
                android:verticalSpacing="0dp"
                android:horizontalSpacing="0dp"
                android:stretchMode="columnWidth"/>

        </LinearLayout>

    </LinearLayout>

    <TextView
        android:id="@+id/mainTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Compose email:"
        android:textSize="20dp"
        android:layout_marginBottom="20dp"
        android:background="@color/green"/>

</LinearLayout>
 
Zuletzt bearbeitet:
ok, Kommando zurück!
Scheinbar geht das mit dem Anhängen, wenn ich auf "zitieren" drücke...
Ich muss also nur etwas tricksen...


StefMa schrieb:
Zur 1 Frage:
Ein GridView mit 9 Feldern und dort jeweils ein weiteres GridView anzuzeigen ist durchaus Sinnvoll... Wenn das nicht so aussieht wie im Bild, wie dann? Wo ist hier dein problem?

Also das hatte ich eigentlich anders gedacht, aber wenn du sagst, dass das gut sei, werde ich es mal so probieren!

Wie es aussieht, kann ich dir nen screenshot anhängen.
Zu 2 Frage:
Auch hier wieder, was erwartest du jetzt?
Wir haben keinerlie XML File um zu schauen wie es derzeit aussieht, noch ein Screenshot.

Wird das denn nun aus der main.xml ersichtlich, oder muss ich dafür noch weiteren Code hochladen?
 

Anhänge

  • tmp_Screenshot_2014-03-17-10-52-02-1565820556.png
    tmp_Screenshot_2014-03-17-10-52-02-1565820556.png
    35,7 KB · Aufrufe: 265
StefMa schrieb:
Ein GridView mit 9 Feldern und dort jeweils ein weiteres GridView anzuzeigen ist durchaus Sinnvoll...
Gruß

ok... ne ganz doofe Frage:

Wie macht man das denn mit ner GridView in einer GridView?

Heißt das, ich schreibe 10 GridViews in die xml und schreibe dann ne art Adapter in ne java datei, der dann neun davon in eine rein packt?

Oder gibt es ne schreibweise, bei der man die GridViews direkt in der xml stapelt?
 
Hi,

ich habe noch nie mit GridView gearbeitet. Wenn ich mich aber jetzt mal schnell eingelesen habe, dann ist android:numColumns zuständig für die anzahl von spalten.
Ergo: wenn du numColumns="3" und ein Adapter mit 9 Views hast, dann müsste es so aussehen
Code:
Erste  | zweite | dritte
Vierte | fünfte  | sechste
siebte | achte  | neunte
Davon gehe ich aus!

Ergo müsste dein Code so aussehen:
Code:
<GridView
   [..]
   android:numColumns="3"
   [...] >
Dann erstellst du ein Custom Adapter, der jeweils ein GriedView zurück gibt.
Dieses kannst du dann "ansprechen".

Gruß
 
Ja, so hatte ich mir das auch gedacht!

Ich schreib dann also einen GridViewAdapter.java und da initialisiere ich ein GridView Array, definiere in ner Schleife 9 mal nen GridView mit 9 Elementen und ebenfalls 3 Spalten und leg die in das Array und dann überschreibe ich die getView Methode des Adapters um da drin je ein Element des Array in ein Element des GridViews zu packen, richtig?

Ich muss die GridViews ja nicht erst alle in einer xml initialisieren, oder?
Ich kann die einfach in .java erstellen, initialisieren und dann mit der getViewById Methode zu der GridView, die ich in der xml erstellt hab hinzufügen, oder?

Ich hab bis jetzt nur ein grobes Verständnis von dem genauen Aufbau und der Funktionsweise von Customadaptern...
Kennst du nen gutes Tutorial, o. ä. wo ich mich darüber informieren kann?

Und wird aus meiner xml ersichtlich, warum mein Logo die Ränder lässt?
 
Sooo...
Also ich hab mich durch die Klassenbeschreibungen geforstet aber leider bin ich wieder an nem toten Punkt angelangt.. =/

MAIN.XML
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="0dp"
    android:layout_margin="0dp"
    android:orientation="vertical"
    android:gravity="top"
    android:verticalSpacing="0dp">

    <ImageView
        android:id="@+id/mainImageViewLogo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="top"
        android:layout_marginTop="0dp"
        android:layout_marginBottom="0dp"
        android:paddingTop="0dp"
        android:paddingBottom="0dp"
        android:src="@drawable/logo"
        android:background="@color/green"
        android:verticalSpacing="0dp"/>

    <GridView
        android:id="@+id/gridViewField"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:columnWidth="0dp"
        android:numColumns="3"
        android:maxRows="3"
        android:padding="0dp"
        android:layout_margin="0dp"
        android:verticalSpacing="0dp"
        android:horizontalSpacing="0dp"
        android:stretchMode="columnWidth"/>
    
</LinearLayout>

MAINACTIVITY.XML
Code:
public class MainActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Display display = getWindowManager().getDefaultDisplay();
        int width = display.getWidth();
        int height = display.getHeight();
        
        //textDarstellung();
        /*
        ImageView logo = (ImageView) findViewById(R.id.mainImageViewLogo);
        logo.setImageResource(R.drawable.logo_land);*/
        
        GridView gridView = (GridView) findViewById(R.id.gridViewField);
        //gridView.setBackgroundColor(Color.BLUE);
        gridView.setAdapter(new GridViewAdapter(this));
        gridView.setOnItemClickListener(new OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> parent, View v, int position, long id){
                Toast.makeText(MainActivity.this, ""+position, Toast.LENGTH_SHORT).show();
            }
            });
        resizer(gridView);
        System.out.println("gridView.getAdapter().getCount(): "+gridView.getAdapter().getCount());
        long test = gridView.getAdapter().getItemId(0);
        //System.out.println(test+"");
    }  

    public void resizer(GridView gridView) {
        Display display = getWindowManager().getDefaultDisplay();
        int width = display.getWidth();
        int height = display.getHeight();
        ImageView logo = (ImageView) MainActivity.this.findViewById(R.id.mainImageViewLogo);
        int logoHeight = logo.getHeight();
        int fieldSize;
        if((height-logoHeight)<width){
            fieldSize = height-logoHeight;
        } else {
            fieldSize = width;
        }
        gridView.setColumnWidth(fieldSize/3);
        gridView.setHorizontalSpacing(0);
        gridView.setStretchMode(0);
        
        //GridView tmp = gridView.getTag(gridViewBox1);
        }
}
GRIDVIEWADAPTER:
Code:
public class GridViewAdapter extends BaseAdapter
{
    private Context mContext;

    public GridViewAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return boxes[position];
    }

    public long getItemId(int position) {
        return boxes[position].getId();
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        GridView gridView;
        if (convertView == null) {
            gridView = new GridView(mContext);
            gridView.setLayoutParams(new GridView.LayoutParams(1080/3, 1080/3));
            gridView.setPadding(0, 0, 0, 0);
            gridView.setNumColumns(3);
            boxes[position] = gridView;
            gridView.setId(6000+position);
            gridView.setTag("gridViewBox"+position);
        } else {
            gridView = (GridView) convertView;
        }
        
        gridView.setAdapter(new ImageAdapter(mContext));
        //gridView.setBackgroundColor(mThumbIds[position]);
        return gridView;
    }
    
    int[] mThumbIds = {
        Color.RED, Color.GREEN, Color.YELLOW,
        Color.WHITE, Color.BLACK, Color.WHITE,
        Color.RED, Color.GREEN, Color.YELLOW
    };
    
    GridView[] boxes = new GridView[9];
}
Wie auf den Screenshots hoffentlich zu sehen ist, bin ich meinem Ziel schon etwas näher gekommen...

...das Problem ist nur, ich habe nciht die geringste Ahnung, wie ich an die 9 GridViews dran kommen soll, welche die Boxen darstellen.

Ich habs versucht über .getAdapter(), aber mit den vom BaseAdapter gelieferten getItem() und getItemId() klappts nicht und wenn ich ne eigene getter-Methode schreibe, gibt's nen error...
...scheinbar kann man da nicht beliebig Methoden implementieren...

Aber irgendwie muss ich ja von der Activity an die ran kommen um die genauen Größen im Verhältnis zum Display und die dargestellten Images zu ändern...
...von der onClick()-Methode ganz zu schweigen...

...ich verzweifel hier langsam =(
 

Anhänge

  • Screenshot_2014-03-19-16-36-55.png
    Screenshot_2014-03-19-16-36-55.png
    38,4 KB · Aufrufe: 275
  • Screenshot_2014-03-19-16-37-01.png
    Screenshot_2014-03-19-16-37-01.png
    53 KB · Aufrufe: 236
Zuletzt bearbeitet:
Ähm.. Naja, einfach im Adapter ein onItemClick hinzufügen...

Gesendet von meinem Nexus 4 mit der Android-Hilfe.de App
 
Danke aber das wirft bei mir die Frage auf...
wie rufe ich den onClick denn auf, ohne auf etwas zu klicken?

Immerhin muss ja auch meine Sudokumethode das fertige Sudoku auf die ImageViews bringen...
Und wenn ich auf nen correct button clicke, der ja nicht im adapter ist, müsste der die korrekturmethode ja auch auf die ImageViews zugreifen können, um die roten Bilder da einzufügen, wo fehler sind...

so richtig erschließt sich mir jetzt nicht, wie ich das mit nem onClick machen soll...

könntest du mir vielleicht bitte nen Beispiel anhand meines Codes geben, wie du das meinst? =3

...vielleicht sehe ich ja den Wald vor lauter Bäumen nicht...
 
Zuletzt bearbeitet:
Ich habs jetzt übrigens erstmal mit GridLayouts anstelle der GridViews probiert...
Das müllt natürlich die main.xml krass voll, dafür kann ich jedes ImageView über die id aus der main.xml direkt ansprechen und von einem listener abfragen lassen...

...aber mich stört auch sehr, dass es dadurch eben so statisch ist...
für ein 9x9 feld ist es ja ok, aber ich würde ungern für jede sudokugröße ne eigene xml anlegen...

...daher ist die lösung mit nem Adapter natürlich besser...
 

Anhänge

  • tmp_Screenshot_2014-03-21-08-47-09-128102133.png
    tmp_Screenshot_2014-03-21-08-47-09-128102133.png
    45,1 KB · Aufrufe: 419
  • tmp_Screenshot_2014-03-21-08-47-14-1565820556.png
    tmp_Screenshot_2014-03-21-08-47-14-1565820556.png
    27,8 KB · Aufrufe: 228

Ähnliche Themen

S
Antworten
0
Aufrufe
131
sorenn
S
M
Antworten
3
Aufrufe
218
moin
M
D
Antworten
17
Aufrufe
442
datNeMo
D
Zurück
Oben Unten