Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Skivs
0 / 0 / 0
Регистрация: 27.07.2016
Сообщений: 5
#1

Программно изменить ширину LinearLayout - Программирование Android

17.08.2016, 16:13. Просмотров 392. Ответов 5
Метки нет (Все метки)

Доброе время суток!
Есть галерея.
XML
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
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content">
<HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent">
        <LinearLayout
            android:id="@+id/linearLayout"
            android:layout_width="500dp"
            android:layout_height="match_parent"
            android:orientation="horizontal">
            <GridView
                android:id="@+id/grid"
                android:layout_width="fill_parent"
                android:layout_height="130dp"
                android:layout_margin="4dp"
                android:columnWidth="100dp"
                android:gravity="center"
                android:numColumns="9"
                android:horizontalSpacing="1dp"
                android:scrollbarAlwaysDrawHorizontalTrack="true"
                android:scrollbarAlwaysDrawVerticalTrack="true"
                android:scrollbars="horizontal"
                android:stretchMode="none"
                android:verticalSpacing="1dp">
            </GridView>
        </LinearLayout>
    </FrameLayout>
</HorizontalScrollView>
</RelativeLayout>
Чтоб она нормально отображалась и прокручивалась LinearLayout задаю ширину 500dp (рассчитываю исходя из количества фоток).

Дальше я вставляю ее фрагментом где мне нужно.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    android:background="#ffff">
       <fragment
           android:id="@+id/fr_image_grid"
           android:name="com.nostra13.universalimageloader.sample.fragment.ImageGridFragment"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_gravity="center_horizontal" />
 
           .....
 
</RelativeLayout>
Так вот, я хочу использовать юту галерею в другом месте с другими фотками. Я вставляю фрагмент в другое место, передаю фотки, вроде все работает. Но у меня там не 5 фоток а больше, а так как длина у меня уже задана в 500dp, то в новой галереи только 5 фото отображаются.
Как мне изменить ширину LinearLayout?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2016, 16:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программно изменить ширину LinearLayout (Программирование Android):

Не могу изменить высотку и ширину Image программно - Программирование Android
На экране есть компонент ImageView, в него загружается картинка из drawable(R.drawable.image_1). Как изменить width и height этой картинки?...

Как программно изменить - Программирование Android
Здравствуйте! Не так давно учусь программировать под Андроид и столкнулся с такой проблемой: Я хочу программно создать n кнопок и...

Программно изменить обои - Программирование Android
Здравствуйте. Как программно изменить обои главного экрана ?

Как программно изменить textview? - Программирование Android
Мне нужно изменить TextView на многострочный текст, используя переменную. . Пример ниже. String gtext = &quot;elements/123.txt&quot;; try...

Программно изменить размер ImageView - Программирование Android
public void displeisize() { DisplayMetrics displaymetrics = getResources().getDisplayMetrics(); int...

Изменить свойства программно созданного элемента - Программирование Android
Проблема. Есть карта на ней маркеры список имен маркеров можно получить layers.get(i).toString() перебрав в цикле Теперь зная имена...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vxg
Модератор
3162 / 1965 / 220
Регистрация: 13.01.2012
Сообщений: 7,523
17.08.2016, 19:38 #2
Skivs, а если просто не задавать ширину? пусть она будет такая какой ее назначат там где вставят
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
17.08.2016, 20:24 #3
Лучше и правда выставлять относительную ширину.
Но если надо, то
Java
1
2
3
4
5
6
7
    public static float convertDpToPx(final Context context, final float dp) {
        return dp * context.getResources().getDisplayMetrics().density;
    }
 
 
layout.getLayoutParams().width = convertDpToPx(getActivity(), 500);
layout.requestLayout();
0
Skivs
0 / 0 / 0
Регистрация: 27.07.2016
Сообщений: 5
18.08.2016, 09:48  [ТС] #4
А как это сделать? Вообще не поставить ширину компилятор ругается, а если выставлять wrap_content или fill_parent то отображается только одна картинка. На код тоже ругается cannot resolve method 'getActivity' (я так понял потому что у меня галерея находится в фрагменте)
0
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,798
Завершенные тесты: 1
18.08.2016, 10:42 #5
если у тебя при wrap_content показывает только одна картинка - ты делаешь что-то очень неправильно в коде и/или в разметке
без полного кода и полной разметки - гадание, занятие неблагодарное
0
Skivs
0 / 0 / 0
Регистрация: 27.07.2016
Сообщений: 5
18.08.2016, 11:46  [ТС] #6
Я взял за основу пример из Android-Universal-Image-Loader убрал все лишние, немножко переделал и теперь просто хочу повторно использовать галерею в проекте.

fr_image_grid.xml
Кликните здесь для просмотра всего текста
XML
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
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content">
<HorizontalScrollView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent">
        <LinearLayout
            android:id="@+id/linearLayout"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="horizontal">
            <GridView
                android:id="@+id/grid"
                android:layout_width="wrap_content"
                android:layout_height="130dp"
                android:layout_margin="4dp"
                android:columnWidth="100dp"
                android:gravity="center"
                android:numColumns="9"
                android:horizontalSpacing="1dp"
                android:scrollbarAlwaysDrawHorizontalTrack="true"
                android:scrollbarAlwaysDrawVerticalTrack="true"
                android:scrollbars="horizontal"
                android:stretchMode="none"
                android:verticalSpacing="1dp">
            </GridView>
        </LinearLayout>
    </FrameLayout>
</HorizontalScrollView>
</RelativeLayout>

ImageGridFragment.java
Кликните здесь для просмотра всего текста
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package com.nostra13.universalimageloader.sample.fragment;
 
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.AbsListView;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.ImageLoadingProgressListener;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import com.nostra13.universalimageloader.sample.Constants;
import com.nostra13.universalimageloader.sample.R;
import com.nostra13.universalimageloader.sample.activity.SimpleImageActivity;
 
public class ImageGridFragment extends Fragment {
    protected AbsListView listView;
    public static final int INDEX = 1;
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fr_image_grid, container, false);
        listView = (GridView) rootView.findViewById(R.id.grid);
        ((GridView) listView).setAdapter(new ImageAdapter(getActivity()));
        listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                startImagePagerActivity(position);
            }
        });
        return rootView;
    }
 
    private void startImagePagerActivity(int position) {
        Intent intent = new Intent(getActivity(), SimpleImageActivity.class);
        intent.putExtra(Constants.Extra.FRAGMENT_INDEX, ImagePagerFragment.INDEX);
        intent.putExtra(Constants.Extra.IMAGE_POSITION, position);
        startActivity(intent);
    }
 
    private class ImageAdapter extends BaseAdapter {
 
        private String[] IMAGE_URLS = Constants.IMAGES;
 
        private LayoutInflater inflater;
 
        private DisplayImageOptions options;
 
        ImageAdapter(Context context) {
            inflater = LayoutInflater.from(context);
 
            options = new DisplayImageOptions.Builder()
                    .showImageOnLoading(R.drawable.ic_stub)
                    .showImageForEmptyUri(R.drawable.ic_empty)
                    .showImageOnFail(R.drawable.ic_error)
                    .cacheInMemory(true)
                    .cacheOnDisk(true)
                    .considerExifParams(true)
                    .bitmapConfig(Bitmap.Config.RGB_565)
                    .build();
        }
 
        @Override
        public int getCount() {
            return IMAGE_URLS.length;
        }
 
        @Override
        public Object getItem(int position) {
            return null;
        }
 
        @Override
        public long getItemId(int position) {
            return position;
        }
 
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            final ViewHolder holder;
            View view = convertView;
            if (view == null) {
                view = inflater.inflate(R.layout.item_grid_image, parent, false);
                holder = new ViewHolder();
                assert view != null;
                holder.imageView = (ImageView) view.findViewById(R.id.image);
                holder.progressBar = (ProgressBar) view.findViewById(R.id.progress);
                view.setTag(holder);
            } else {
                holder = (ViewHolder) view.getTag();
            }
 
            ImageLoader.getInstance()
                    .displayImage(IMAGE_URLS[position], holder.imageView, options, new SimpleImageLoadingListener() {
                        @Override
                        public void onLoadingStarted(String imageUri, View view) {
                            holder.progressBar.setProgress(0);
                            holder.progressBar.setVisibility(View.VISIBLE);
                        }
 
                        @Override
                        public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                            holder.progressBar.setVisibility(View.GONE);
                        }
 
                        @Override
                        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                            holder.progressBar.setVisibility(View.GONE);
                        }
                    }, new ImageLoadingProgressListener() {
                        @Override
                        public void onProgressUpdate(String imageUri, View view, int current, int total) {
                            holder.progressBar.setProgress(Math.round(100.0f * current / total));
                        }
                    });
 
            return view;
        }
    }
 
    static class ViewHolder {
        ImageView imageView;
        ProgressBar progressBar;
    }
}


content_metal.xml сюда вставляю фрагмент
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    android:background="#ffff">
       <fragment
           android:id="@+id/fr_image_grid"
           android:name="com.nostra13.universalimageloader.sample.fragment.ImageGridFragment"
           android:layout_width="500dp"
           android:layout_height="wrap_content"
           android:layout_gravity="center_horizontal" />
</RelativeLayout>


activity_metal.xml
Кликните здесь для просмотра всего текста
XML
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
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.nostra13.universalimageloader.sample.activity.Metal">
 
    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">
 
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />
 
    </android.support.design.widget.AppBarLayout>
 
    <include layout="@layout/content_metal" />
 
</android.support.design.widget.CoordinatorLayout>


Metal.java
Кликните здесь для просмотра всего текста
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
package com.nostra13.universalimageloader.sample.activity;
 
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.webkit.WebView;
 
import com.nostra13.universalimageloader.sample.R;
 
public class Metal extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_metal);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
 
        toolbar.setNavigationIcon(R.drawable.ic_keyboard_backspace_white_24dp);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }
 }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2016, 11:46
Привет! Вот еще темы с ответами:

Как программно изменить текст в TextView - Программирование Android
Как из MainNavigationActivity изменить текст в шапке меню? Там где текст @Android Studio@

Изменить процент зарядки батареи программно - Программирование Android
Привет. Люблю я не стандартные вопросы задавать. У знакомого сломалась зарядка на планшете и видимо коротнула, теперь батарею заряжай...

Свайп по linearlayout - Программирование Android
есть linearlayout в котором находиться еще 2 linearlayout каждый из них заполняет основной на 50% при том что внутри них есть текст и...

selector и linearlayout - Программирование Android
пытаюсь заставить linearlayout графически реагировать на нажатие помогите, не работает &lt;LinearLayout ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.08.2016, 11:46
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru