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

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

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

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

17.08.2016, 16:13. Просмотров 331. Ответов 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
Посмотрите здесь:

Прослушать на клик LinearLayout Android
LinearLayout vs RelativeLayout Android
selector и linearlayout Android
Свайп по linearlayout Android
Android Не могу изменить высотку и ширину Image программно
Как программно изменить textview? Android
Android Стиль LinearLayout
Android Как программно изменить
Не работает marginRight в LinearLayout Android
Android Программно изменить размер ImageView
Android Изменить процент зарядки батареи программно
Android Изменить свойства программно созданного элемента

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3067 / 1869 / 196
Регистрация: 13.01.2012
Сообщений: 7,110
17.08.2016, 19:38     Программно изменить ширину LinearLayout #2
Skivs, а если просто не задавать ширину? пусть она будет такая какой ее назначат там где вставят
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
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' (я так понял потому что у меня галерея находится в фрагменте)
Паблито
2240 / 1813 / 564
Регистрация: 12.05.2014
Сообщений: 6,456
Завершенные тесты: 1
18.08.2016, 10:42     Программно изменить ширину LinearLayout #5
если у тебя при wrap_content показывает только одна картинка - ты делаешь что-то очень неправильно в коде и/или в разметке
без полного кода и полной разметки - гадание, занятие неблагодарное
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