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

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

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

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

17.08.2016, 16:13. Просмотров 350. Ответов 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?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2016, 16:13     Программно изменить ширину LinearLayout
Посмотрите здесь:

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

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

Как программно изменить 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() перебрав в цикле Теперь зная имена...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3143 / 1945 / 214
Регистрация: 13.01.2012
Сообщений: 7,437
17.08.2016, 19:38     Программно изменить ширину LinearLayout #2
Skivs, а если просто не задавать ширину? пусть она будет такая какой ее назначат там где вставят
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
17.08.2016, 20:24     Программно изменить ширину LinearLayout #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();
Skivs
0 / 0 / 0
Регистрация: 27.07.2016
Сообщений: 5
18.08.2016, 09:48  [ТС]     Программно изменить ширину LinearLayout #4
А как это сделать? Вообще не поставить ширину компилятор ругается, а если выставлять wrap_content или fill_parent то отображается только одна картинка. На код тоже ругается cannot resolve method 'getActivity' (я так понял потому что у меня галерея находится в фрагменте)
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 1
18.08.2016, 10:42     Программно изменить ширину LinearLayout #5
если у тебя при wrap_content показывает только одна картинка - ты делаешь что-то очень неправильно в коде и/или в разметке
без полного кода и полной разметки - гадание, занятие неблагодарное
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2016, 11:46     Программно изменить ширину LinearLayout
Еще ссылки по теме:

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

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

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

LinearLayout vs RelativeLayout - Программирование Android
этот LinearLayout вообщевозможно переделать на RelativeLayout??? &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;LinearLayout ...

Стиль LinearLayout - Программирование Android
Если дать LinearLayout`у стиль Edit`а - это нормально?) &lt;LinearLayout android:orientation=&quot;horizontal&quot; ...

Отрицательный margin в LinearLayout - Программирование Android
Есть такой layout &lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; ...


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

Или воспользуйтесь поиском по форуму:
Skivs
0 / 0 / 0
Регистрация: 27.07.2016
Сообщений: 5
18.08.2016, 11:46  [ТС]     Программно изменить ширину LinearLayout #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();
            }
        });
    }
 }
Yandex
Объявления
18.08.2016, 11:46     Программно изменить ширину LinearLayout
Ответ Создать тему
Опции темы

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