Jak zmienić padding w TextView na innym layoucie?

0

Najpierw musicie poznać pliki:

  • pierwszy.java zawiera AppWidgetProvider (to główny plik)
  • drugi.java zawiera Activity
  • layout1.xml (korzysta z niego główny plik)
  • layout2.xml

Kod, który piszę teraz, znajduje się w pliku drugi.java. Ustawiłem w nim OnClickListener i użyłem 'public void onClick(View v)' dla Button. Czyli kliknięcie na niego działa dobrze, kod wykonuje się.

Pozostało mi dowiedzieć się - w jaki sposób zmienić padding (programowo i w pliku drugi.java) w textView1 (który umieszczony jest na layout1.xml? [przypominam, że ten textView wyświeta się na Widget]).

Kod typu:

TextView tv1 = (TextView) findViewById(R.id.textView1);
tv1.setPadding(0, 0, 0, 0);

powoduje błąd po kliknięciu, czyli nie ustawia Padding mu (i to nie jest wina odświeżania w OnUpdate [w pliku pierwszy.java], bo ta działa prawidłowo). Widocznie zwracam się w zły sposób do tego textView1. Mam nadzieję, że w miarę szczegółowo odpisałem mój problem i każdy go zrozumie.
Proszę uprzejmie o rady. Pozdrawiam i życzę kolorowych snów i awansu w pracy.

0

Nie do końca Cię rozumiem, ale sugerując się nazwą tematu to do zmiany elementów innego layoutu potrzebujesz inflater'a.

LayoutInflater inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

View vi = inflater.inflate(R.layout.TWOJ_LAYOUT, null);
TextView tv1 = (TextView) vi.findViewById(R.id.textView1);
tv1.setPadding(0, 0, 0, 0);
0

@nieznasz dziękuję, ale nie daję sobie z tym rady.
Nie mam activity oraz context z małej litery więc nie mogłem skopiować tej linijki kodu i wkleić. Dlatego spróbowałem w inny sposób to zrobić:

Activity activity = (Activity)getApplicationContext();
LayoutInflater lInflater = (LayoutInflater) activity.getSystemService(getApplicationContext().LAYOUT_INFLATER_SERVICE);

Jednak po włączeniu apki i próbie wykonania tego kodu, wyskakuje error, że apka stopped. Masz jakiś pomysł jak zrobić ten kod poprawnie?

0

Ja się dopiero uczę i mam wiedzę na niskim poziomie, ale widzę, że Ty to już w ogóle :D
Jeśli chcesz zmieniać TextView w innej klasie, to musisz do niej przekazać activity jako parametr. np.

Mam klasę MainActivity, której widokiem jest layout1 oraz mam drugą klasę DrugaKlasa. DrugaKlasa zawiera metodę, którą chcę zmienić wygląd TextView należący do layout1, nazwijmy ją ZmienWygladTextView.
W klasie MainActivity stwórz zmienną typu Activity, tak jak to robiłeś, ale wpisz tak:

Activity activity = this;

Teraz, należy stworzyć obiekt naszej drugiej klasy, aby wywołać jego metodę i przekazać parametr activity. :

DrugaKlasa drugaKlasa = new DrugaKlasa();
drugaKlasa.ZmienWygladTextView(activity);

A później spróbuj z tym kodem, który podałem Ci we wcześniejszych postach.

LayoutInflater inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 
View vi = inflater.inflate(R.layout.TWOJ_LAYOUT, null);
TextView tv1 = (TextView) vi.findViewById(R.id.textView1);
tv1.setPadding(0, 0, 0, 0);

Pisałem z głowy, mam nadzieję, że Ci pomogłem oraz że nie popełniłem błędu. Jak już pisałem wcześniej raczkuję w Androidzie i tak to widzę jak to napisałem. Nie jestem pewny czy nie trzeba zwracać widoku do MainActivity, aby zmienić wygląd. Spróbuj.

Pozdrawiam Nieznasz

0

@nieznasz
W Javie łącznie spędziłem na pisaniu maksymalnie do paru godzin, nie czytając żadnych książek i to od razu zacząłem od programowania na Androida zamiast czytać o zwykłej Javie więc faktycznie moja wiedza jest praktycznie zerowa.

Activity activity = this;

Tej linijki nie wykonam w MainActivity, nawet po zaimportowaniu Activity, prawdopodobnie dlatego, że ten mój główny plik .java zawiera extends AppWidgetProvider, zamiast extends Activity, dlatego że robię widget, a nie zwykłą aplikację.
Już zakładając ten temat podałem listę moich plików (pominąłem jedynie plik z usługą extends Service).

Czyli zrobię to tak jak napisałeś, czy w tym przypadku nieco inaczej? Pamiętaj, że każdy twój post mnie cieszy i jestem ci bardzo wdzięczny, że poświęcasz mi czas odpowiadając na pytania.

@nieznasz
i dodam jeszcze to:

  • mój główny plik powiązany jest z np. layout1.xml
  • mój drugi plik powiązany jest z layout2.xml
  • w tym drugim pliku mam ustawiony OnClickListener dla przycisków znajdujących się na layout2.xml

Czyli podsumowując mam widget oraz okno ustawień widgetu, na którym są buttony, klikając w button chcę zmienić padding na widgecie i zastanawiam się jak to zrobić, bo może muszę przekazywać te rzeczy do klasy głównej, która np. w OnUpdate widgetu będzie wprowadzała zmiany? Bo do tej pory myślałem, ze sobie w tym OnClick buttona napiszę jakiś kod i mi padding zmieni bez problemu.

@nieznasz
Dobra. W takim razie mam inne pytanie. Załóżmy, że mam jedynie Widget i jeden plik główny java, zero innych. W metodzie onUpdate widgetu, odświeżają się informacje o Widgecie. Jak w tej sekcji OnUpdate zmienić padding textView1, z którego Widget korzysta? Bo przez RemoteViews raczej nie mogę tego zrobić.

Krótko mówiąc, chcę wpisać coś tutaj:

	@Override
	public void onUpdate(Context context, AppWidgetManager appWidgetManager,
			int[] appWidgetIds)

Czego użyć tu by padding ustawiać? Zmieniam już nazwę texView1 za pomocą setTextViewText jednak co z paddingiem?

0

Drogi @uuuuuuuuu , cóż Moja wina, że niedokładnie przeczytałem Twój wątek i pisałem trochę poza tematem, pomimo tego mam nadzieję, że czegoś Cię nauczyłem.
Co do Twojej wiedzy i tego, że nie czytałeś żadnych książek, wiesz jak jest. Najlepiej przewertować temat od podstaw i nie chodzi tylko o ksiązki, ale też o fora, praktykę i google. Uważam, że nie wziąłeś się za temat solidnie.

Co do problemu z ustawieniem paddingu w klasie rozszerzonej o AppWidgetProvider. To nigdy nie pracowałem na widgecie i nie wiem jak tu sprawa wygląda. Nie jestem aktualnie na laptopie, na którym mam zainstalowane środowisko do programowania, takźe tego nie sprawdzę, ale znalazłem 2 tematy, na które zapewne już wpadłeś, jeśli nie to zerknij:
http://stackoverflow.com/questions/4292138/android-textview-settext-doesnt-work-on-simple-widget
http://stackoverflow.com/questions/12688566/how-to-set-text-on-a-widgets-textview

Jeśli da się modyfikować tekst, wydaję Mi się, że można również zmieniać padding.
Spróbuj, a póki co trzeba poczekać, aż wypowie się ktoś kto jest w tym temacie obeznany, Moja wiedza jest zbyt mała.

Postaram się jutro pobawić z kodem i zobaczyć co z tego wyjdzie.
Dzięki

0

@nieznasz
Nie mam konta więc nawet nie mam jak tobie podziękować kciukami. A sam tekst w textView1 umiem zmieniać, o czym wspominałem :)

A co do paddingu w widgecie, w OnUpdate to dowiedziałęm się, że istnieje views.setViewPadding, jednak wymaga to aż min SDK LVL 16, czyli taka aplikacja mogłaby nie być dostępna dla większości telefonów ze starszymi wersjami androida więc wolę zostać przy domyślnej min. wersji SDK, czyli 8. A coś z jakąś "referencją" da radę? Nie mówi mi to nic na razie i pytam teraz ogólnie wszystkich ludzi z tego forum.

1 użytkowników online, w tym zalogowanych: 0, gości: 1